Правильный способ маршрутизации между 2 интерфейсами с netplan в Ubuntu 18.04
Проблема и настройка сети
В настоящее время я пытаюсь разрешить связь между двумя интерфейсами, каждый из которых имеет собственную подсеть, на сервере Ubuntu 18.04 с использованием netplan, но мне трудно получить правильную конфигурацию. Вот графическое представление того, как выглядит сеть:
Сеть Объяснение
На изображении центральное желтое устройство - это DHCP-сервер для клиентов слева, использующий интерфейс enp8s0 со статическим ip 192.168.254.254 и маской подсети 255.255.255.240. Клиенты (оранжевые ящики) получают свой IP-адрес с сервера DHCP. Каждый клиент также размещает веб-страницу через Nginx. Все эти устройства работают на сервере Ubuntu 18.04. Адреса, возможно меняющиеся на каждом клиентском компьютере, не являются проблемой.
На правой стороне желтый "сервер" имеет интерфейс enp7s0, настроенный со статическим ip 172.16.0.1 и маской подсети 255.255.255.252. Затем этот интерфейс подключается к моему ноутбуку, у которого его интерфейс настроен на 172.16.0.2 с той же маской подсети.
Общая цель
То, что я пытаюсь сделать, это иметь возможность просматривать веб-сайт на любом из клиентов с моего ноутбука. Нет необходимости подключаться к Интернету ни на одной из этих машин, и все соединения выполняются через кабели Ethernet.
Текущая конфигурация
Netplan:
Желтый "сервер" файл конфигурации netplan:
network:
version: 2
renderer: networkd
ethernets:
enp7s0:
addresses: [172.16.0.1/30]
gateway4: 172.16.0.1
routes:
- to: 192.168.254.240/28
via: 172.16.0.1
on-link: true
enp8s0:
addresses: [192.168.254.254/28]
gateway4: 192.168.254.254
routes:
- to: 172.16.0.0/30
via: 192.168.254.254
on-link: true
Переадресация IP:
Линия net.ipv4.ip_forward=1
не комментируется в файле /etc/sysctl.conf.
Бег cat /proc/sys/net/ipv4/ip_forward
возвращает 1.
DHCP-сервер:
Я установил INTERFACESv4 равным enp8s0 в / etc / default / isc-dhcp-server.
Наконец, мой /etc/dhcp/dhcpd.conf настроен следующим образом:
# option definitions common to all supported networks...
default-lease-time 600;
max-lease-time 7200;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# So DHCP server knows of other subnet
subnet 172.16.0.0 netmask 255.255.255.252 {
}
# DHCP server subnet
subnet 192.168.254.240 netmask 255.255.255.240 {
range 192.168.254.241 192.168.254.253;
option subnet-mask 255.255.255.240;
option routers 192.168.254.254;
option broadcast-address 192.168.254.255;
default-lease-time 600;
max-lease-time 7200;
}
1 ответ
Я не буду использовать маршруты, чтобы попытаться правильно распределить трафик между двумя подсетями. Вы можете оказаться в цикле маршрутизации, который сломает вещи.
Вероятно, вам следует подумать о том, чтобы заставить вашу систему вести себя как маршрутизатор и выполнять всю пересылку с помощью NAT. Быстрый и простой способ сделать это - использовать NAT MASQUERADE на каждом из интерфейсов. (Но вам также нужно будет выбрать правила маршрута, которые у вас есть, поскольку они не будут работать должным образом.)
Вам необходимо добавить правила брандмауэра, которые будут обрабатывать следующие случаи:
- 192.168.254.240/28 -> 172.16.0.0/30
- 172.16.0.0/30 -> 192.168.254.240/28
С iptables
вам нужно настроить его так (закомментированные строки с # в начале объясняют, что делает каждое правило):
# Allow traffic to be forwarded from enp7s0 to enp8s0
iptables -A FORWARD -i enp7s0 -j ACCEPT
# Allow traffic to be forwarded from enp8s0 to enp7s0
iptables -A FORWARD -i enp8s0 -j ACCEPT
Вам также нужно настроить правила NAT, и это не очень хорошо, но мы должны позволить "маршрутизатору" быть тем, кем мы маскируем источники.
iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp8s0 -j MASQUERADE
Это должно разрешить двунаправленный обход NAT между подсетями. Обязательно сохраните эти правила на будущее.
Дайте мне знать, если это не сработает, я пойду углубиться в проблему, если это произойдет.