На моем сервере есть две карты Ethernet:
enp0s17
, локальный IP 192.168.0.7
, публичный адрес роутера x.x.x.x
, маска сети 255.255.255.255
enp0s18
, локальный IP 172.16.0.7
, публичный адрес роутера y.y.y.y
, маска сети 255.255.255.0
В обеих сетях любой входящий трафик из двух общедоступных IP-адресов направлено на сервер. Итак, фактически любой SSH, HTTP и т.д. x.x.x.x
должен быть отправлен 192.168.0.7
и любой трафик на y.y.y.y
должен быть отправлен 172.16.0.7
.
К сожалению, это работает только для один из них сразу. Иногда (после отключения и повторного подключения сервера к Интернету, например, после перезагрузки) это работает для enp0s17
а иногда для enp0s18
но никогда для обоих в то же время. (Итак, оба маршрутизатора маршрутизируют правильно, похоже, проблема сервера.)
Та же проблема касается исходящего трафика, протестированного с помощью curl --interface enp0s1X ...
.
С другой стороны, любой местное движение правильно маршрутизируется. В обеих сетях сервер всегда доступен на своих локальных IP-адресах.
Есть ли у кого-нибудь идеи, что может вызвать эту проблему или как ее решить?
Для тестирования я полностью отключил брандмауэр, так что это не должно быть проблемой.
(Оба интерфейса также используют делегирование префикса IPv6, но я просто не упомянул его, поскольку он работает правильно.)
Оба маршрутизатора - это Ubiquiti EdgeRouters. IP-адреса статически выдаются DHCP-серверами на маршрутизаторах. Конфигурация сети выполняется с помощью netplan
. Использование Ubuntu 20.04.
Мой netplan
config:
network:
version: 2
renderer: networkd
ethernets:
enp0s17:
dhcp4: yes
dhcp6: yes
enp0s18:
dhcp4: yes
dhcp6: yes
маршрут по умолчанию:
default via 192.168.0.1 dev enp0s17 proto dhcp src 192.168.0.7 metric 100
default via 172.16.0.1 dev enp0s18 proto dhcp src 172.16.0.7 metric 100
172.16.0.0/16 dev enp0s18 proto kernel scope link src 172.16.0.7
172.16.0.1 dev enp0s18 proto dhcp scope link src 172.16.0.7 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-b20299b5e473 proto kernel scope link src 172.18.0.1
172.19.0.0/16 dev br-ba582f6855c2 proto kernel scope link src 172.19.0.1
192.168.0.0/24 dev enp0s17 proto kernel scope link src 192.168.0.7
192.168.0.1 dev enp0s17 proto dhcp scope link src 192.168.0.7 metric 100
default via 192.168.0.1 dev enp0s17 proto dhcp src 192.168.0.7 metric 100
default via 172.16.0.1 dev enp0s18 proto dhcp src 172.16.0.7 metric 100
Ваша проблема в том, что у вас есть два маршрута по умолчанию - у вас может быть только один. Ваши входящие данные в порядке. Но когда ваш сервер отправляет ответ, поскольку у вас есть два маршрута по умолчанию, сервер чередует эти два маршрута. т.е., половина пакетов идет в неправильном направлении.
Вам нужно выбрать один интерфейс по умолчанию, и вам нужно будет добавить явные маршруты для других сетей.