У меня есть ПК с Ubuntu 18.04, и я пытаюсь настроить два интерфейса GbE в качестве шлюза / маршрутизатора. Я ответил на некоторые связанные вопросы и попытался следовать руководствам, например, этому: Как сделать простой маршрутизатор \ шлюз из Ubuntu Server 18.04 LTS .
Высокоуровневое намерение состоит в том, чтобы одна из сетевых карт была интерфейсом «WAN» (enp2s0), получающим свой адрес, серверы имен, шлюз и т. Д. Через DHCP от другого маршрутизатора, расположенного дальше по потоку (18.1.0.0/24), а другая сетевая карта служит «ЛОКАЛЬНЫМ» интерфейсом (enp0s31f6), подключенным к ряду устройств со статически назначенными адресами в альтернативной подсети (192.168.0.0/24). Желательно, чтобы устройства, подключенные к статической сети уровня 2 (192.168.0.0/24), могли подключиться к сети WAN уровня 3 (18.1.0.0/24), которая, в свою очередь, может обеспечивать выход в Интернет в зависимости от конфигурации. Для этого между двумя подсетями должен быть протокол SNAT.
Вот диаграмма топологии сети для справки: Шлюз / маршрутизатор с двумя сетевыми картами
Используя конфигурацию ниже, я вижу, что устройства в «ЛОКАЛЬНОЙ» сети (192.168.0.0/24) могут получать доступ к другим устройствам в той же подсети, могут получить доступ к самому интерфейсу WAN по адресу 18.1.0.0/24 (который фактически назначается DHCP), но не может успешно выйти за пределы интерфейса WAN на другие устройства 18.1.0.0/24 в этой сети (проверка связи с известными устройствами по адресам 18.1.0.0/24 не возвращает маршрут принимать гостей).
Я попытался настроить интерфейсы через netplan, как показано ниже:
network:
ethernets:
enp2s0:
#WAN
dhcp4: yes
dhcp4-overrides:
route-metric: 100
gateway4: 18.1.0.1
nameservers: [8.8.8.8, 8.8.4.4]
enp0s31f6:
#LOCAL
addresses:
- 192.168.0.1/24
dhcp4: no
version: 2
Затем я включил переадресацию IP через
sudo nano /etc/sysctl.conf
и раскомментирование net.ipv4.ip_forward = 1
Наконец (после перезагрузки) я настроил IP-таблицы для SNAT и основных правил брандмауэра через:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o enp2s0 -j MASQUERADE
sudo iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -m state --state RELATED -j ACCEPT
sudo iptables -A FORWARD -i enp2s0 -o enp0s31f6 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo apt-get install iptables-persistent
Для тестирования я подключил устройство к «ЛОКАЛЬНОЙ» сетевой карте (192.168.0.0/24) с резервированием статического адреса в этой подсети (192.168.0.99/24 для тестирования) и со шлюзом, настроенным на адрес сетевой карты шлюза (192.168.0.1). 0.1 в этом примере). Я могу «видеть» (пинговать) шлюз и другие устройства, статически назначенные на 192.168.0.0 / 24 и адрес самого сетевого адаптера WAN (назначенный DHCP, в настоящее время 18.1.0.94) без проблем, но не может связаться (проверить связь) с другими устройствами в подсети 18.1.0.0/24, которые, как я знаю, там есть.
Буду очень признателен за любые советы о том, чего мне может не хватать в конфигурации здесь!
По запросу в комментариях, вот файл правил, созданный вышеуказанными командами iptables (rules.v4):
# Generated by iptables-save v1.6.1 on Wed Sep 2 16:25:54 2020
*filter
:INPUT ACCEPT [117:21241]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [103:6753]
-A FORWARD -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -m state --state RELATED -j ACCEPT
COMMIT
# Completed on Wed Sep 2 16:25:54 2020
# Generated by iptables-save v1.6.1 on Wed Sep 2 16:25:54 2020
*nat
:PREROUTING ACCEPT [18:1766]
:INPUT ACCEPT [18:1766]
:OUTPUT ACCEPT [70:5183]
:POSTROUTING ACCEPT [70:5183]
-A POSTROUTING -s 192.168.0.0/24 -o enp2s0 -j MASQUERADE
COMMIT
# Completed on Wed Sep 2 16:25:54 2020
Для тех, кто снова находит этот вопрос, я обнаружил причину, если не решение. Конфигурация Docker нашей системы добавляла правила в таблицы IP-адресов, которые каким-то образом мешали функциям маршрутизации NIC. После удаления этой установки Docker конфигурация, описанная в вопросе, работает должным образом!