У меня 2 сетевые карты с публичными ip. Я запускаю 2 сервиса. Так как мне маршрутизировать соединения?
На данный момент работает только один IP-адрес интерфейса, хотя оба пингуются из Интернета.
Моя таблица маршрутизации выглядит примерно так:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.128.1 0.0.0.0 UG 0 0 0 eth1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.31.128.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.31.129.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Так что же мне добавить, чтобы это сработало?
На данный момент eth1 работает без проблем.
решение1
Я предполагаю, что это Linux, судя по названиям интерфейсов и тегу «iproute2».
Это не работает, потому что простое указание маршрута по умолчанию будет означать, что весь исходящий трафик будет проходить через этот интерфейс, даже ответы на запросы, пришедшие с другого интерфейса!
В вашем случае вы говорите, что у вас есть публичные IP, но два напрямую подключенных интерфейса имеют частные IP-адреса, поэтому я предполагаю, что это означает, что у вас работает NAT. Всякий раз, когда у вас есть NAT, вы не можете использовать этот тип треугольной маршрутизации, где входящие и исходящие пакеты идут по разным путям, потому что пакеты были изменены на пути к NAT-блоком и должны быть изменены таким же образом на выходе. Ваш запрашивающий клиент в конечном итоге получает пакеты с IP-адреса, которого он не ожидает, и не распознает ответ.
Все, что вам нужно сделать, это сообщить операционной системе, что любые пакеты с IP-адресами, исходящие из вашего интерфейса в сети 172.31.128.0/24 в направлении Интернета, должны попадать на шлюз в сети 172.31.128.1 и, соответственно, в подсеть 172.31.129.0/24.
Это можно сделать следующим образом:
ip route add 172.31.129.0/24 dev eth0 src 172.31.129.XXX table T1
ip route add default via 172.31.129.1 table T1
ip route add 172.31.128.0/24 dev eth1 src 172.31.128.XXX table T2
ip route add default via 172.31.128.1 table T2
ip rule add from 172.31.129.XXX table T1
ip rule add from 172.31.128.XXX table T2
Вам необходимо заменить XXX на IP-адрес вашего сервера в этих локальных подсетях.
Это должно помочь вам начать. Вы найдете больше информации по этой теме враздел 4.2 Руководства по расширенной маршрутизации и управлению трафиком в Linux.