Как пробросить порты ч-з несколько сетевых интерфейсов на Ubuntu?
Имеется сервер на Ubuntu, с 2мя сетевыми интерфейсами, за которыми роутеры со своими провайдерами и своей подсетью.
Интернет и прочее на Ubuntu приходит по DHCP по двум eth. А на роутерах проброшены определенные порты которые идут на конечный сервер.
Так вот, проброс портов работает только на одном из роутеров, т.е с внешки могут стучаться в UBuntu только с одного роутера, а именно с того, чья метрика меньше (соответственно с него и интернет берется тоже), но не одновременно ч-з два роутера.
Мне нужно, чтобы интернет брался допустим с eth0, а проброс портов работал с двух роутеров ч- eth0 и eth1 одновременно, а не с того, чья метрика с 0.0.0.0 меньше.
Тут возникает проблема с маршутизацией.
Входящий пакет доходит до Ubuntu.
Но для исходящего пакета действует стандартная таблица маршрутизации, поэтому он уходит на роутер с меньшей метрикой, и связь не работает.
Не уверен что это вообще решается.
Как костыль:
Две машины (две виртуалки), каждая из которых работает через свой роутер (провайдера). Если надо, они отдельно синхронизируется между собой данные...
FlowerShopGuy, Вот есть ответ от GPT-3.5
Для того чтобы настроить проброс портов с двух роутеров одновременно на ваш сервер Ubuntu, вам нужно будет сконфигурировать маршрутизацию и правила iptables.
Вот пример того, как это можно сделать:
Установите необходимые утилиты:
sudo apt update
sudo apt install iptables
Настройте маршрутизацию для обоих интерфейсов в файле /etc/iproute2/rt_tables. Добавьте следующие строки:
200 eth0
201 eth1
Настройте маршруты для каждого интерфейса. Для этого добавьте следующие правила в /etc/network/interfaces:
up ip route add default via dev eth0 table eth0
up ip route add default via dev eth1 table eth1
Настройте правила iptables для проброса портов. Например, для проброса порта 80 с обоих роутеров на ваш сервер, используйте следующие команды:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination :80
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination :80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
Убедитесь, что ваши правила iptables сохраняются после перезагрузки сервера. Для этого выполните:
sudo iptables-save > /etc/iptables/rules.v4
После выполнения этих шагов, ваш сервер Ubuntu должен принимать запросы на проброшенные порты с обоих роутеров одновременно. Пожалуйста, не забудьте заменить , и на соответствующие значения вашей сети.
Попробуйте,самому интересно можно ии верить или нет
FlowerShopGuy, А вот Claude 3 дает другой ответ
Определите IP-адреса и шлюзы для каждого интерфейса на вашем Ubuntu-сервере:
ip addr show
ip route show
Создайте статические маршруты для каждого интерфейса, которые будут использоваться для проброса портов:
sudo ip route add <внешний_ip_адрес>/<маска> dev eth0 src table 100
sudo ip route add <внешний_ip_адрес>/<маска> dev eth1 src table 101
Добавьте правила для выбора таблицы маршрутизации в зависимости от назначения трафика:
sudo ip rule add fwmark 1 table 100
sudo ip rule add fwmark 2 table 101
Настройте iptables для пометки трафика, который должен идти через определенный интерфейс:
sudo iptables -t mangle -A PREROUTING -d <внешний_ip_адрес>/<маска> -j MARK --set-mark 1
sudo iptables -t mangle -A PREROUTING -d <другой_внешний_ip_адрес>/<маска> -j MARK --set-mark 2
Перезагрузите правила маршрутизации:
sudo systemctl restart networking
После выполнения этих шагов трафик для проброса портов должен идти через определенные интерфейсы (eth0 и eth1), независимо от метрики маршрута по умолчанию.
Обратите внимание, что вам необходимо заменить <внешний_ip_адрес>, <маска>, и на соответствующие значения для вашей конфигурации.
Аж любопытно стало что получится,самому негде пробовать
Это решается таблицами маршрутизации, маркировкой соединений через mangle правила, если кратко, то должно выглядить как-то так:
ip ru a table 1 fwmark 1
ip r a default via <1 ips gw> t 1
ip ru a table 2 fwmark 2
ip r a default via <2 ips gw> t 2
iptables -t mangle -I PREROUTING -m conntrack --ctstate NEW -i <eth ips 1> -j CONNMARK --set-xmark 1
iptables -t mangle -I PREROUTING -m conntrack --ctstate NEW -i <eth ips 2> -j CONNMARK --set-xmark 2
iptables -t mangle -A PREROUTING -m connmark --mark 1 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -m connmark --mark 2 -j MARK --set-mark 2
Ох, сложновато для меня это для меня, но все равно спасибо за ответ, попытаюсь разобраться.
Куда примерно это нужно прописать? Подобное делал на микротике, но с убунту не дружу вовсе.
ip ru a table 1 fwmark 1
ip r a default via 192.168.20.254 t 1
ip ru a table 2 fwmark 2
ip r a default via 192.168.0.1 t 2
iptables -t mangle -I PREROUTING -m conntrack --ctstate NEW -i eth0 -j CONNMARK --set-xmark 1
iptables -t mangle -I PREROUTING -m conntrack --ctstate NEW -i eth1 -j CONNMARK --set-xmark 2
iptables -t mangle -A PREROUTING -m connmark --mark 1 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -m connmark --mark 2 -j MARK --set-mark 2
Верно?
udp: прописал значения выше и не помогло, а точнее пропал проброс портов с 2х роутеров.