Вопрос или проблема
У меня есть два публичных IP. Один подключен к eth0, а другой к eth1, от двух отдельных маршрутизаторов как полный DMZ к локальному IP.
Я добавил следующее:
ip rule add from 10.0.0.108/32 table 1 # исходящий
ip rule add to 10.0.0.108/32 table 1 # входящий
ip route add default via 10.0.0.1 dev eth0 table 1
ip rule add from 10.0.0.100/32 table 2 # исходящий
ip rule add to 10.0.0.100/32 table 2 # входящий
ip route add default via 10.0.0.1 dev eth1 table 2
После добавления этого у меня возникли проблемы с корректной передачей трафика для входящих и исходящих соединений.
Например:
$ ping -I eth0 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.0.0.108 eth0: 56(84) байт данных.
From 10.0.0.108 icmp_seq=2 Хост назначения недоступен
From 10.0.0.108 icmp_seq=3 Хост назначения недоступен
From 10.0.0.108 icmp_seq=4 Хост назначения недоступен
$ ping -I eth1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.0.0.28 eth1: 56(84) байт данных.
64 байта от 8.8.8.8: icmp_seq=1 ttl=48 время=14.6 мс
64 байта от 8.8.8.8: icmp_seq=2 ttl=48 время=14.6 мс
^C
--- 8.8.8.8 статистика пинга ---
2 пакета переданы, 2 получены, 0% потерь, время 1233мс
rtt min/avg/max/mdev = 14.611/14.639/14.667/0.028 мс
Как мне использовать метод ip rule add from/to
, чтобы исправить eth0 (входящий/исходящий), но не нарушить работу eth1 (eth1 работает отлично).
Похоже, вы перенаправляете весь трафик через eth1 (default via 10.0.0.1 dev eth1 table 2
предпочтительнее, чем default via 10.0.0.1 dev eth0 table 1
), но использование -I eth0
просто заменяет src IP
пакетов icmp
(исправьте меня, если я не прав).
Также существует ли шлюз 10.0.0.1
в обеих сетях?
Я верю, что эта статья LARTC определенно поможет вам.
Кстати, было бы неплохо, если бы вы предоставили нам больше информации о конфигурации сети.
Ответ или решение
Чтобы решить проблему с сетевыми интерфейсами eth0 и eth1, где трафик, выходящий через eth0, не работает, нам необходимо внимательно рассмотреть настройки маршрутизации и правила, которые вы добавили. Поскольку eth1 работает исправно, важно точно настроить eth0, чтобы оба интерфейса могли работать одновременно, не конфликтуя друг с другом и не нарушая работу сети.
Шаги для устранения проблемы
-
Проверка маршрутов и правил:
Первое, что стоит сделать, это убедиться, что ваши правила маршрутизации правильные и не перекрывают друг друга. В вашем коде вы добавили следующие правила:ip rule add from 10.0.0.108/32 table 1 # outbound for eth0 ip rule add to 10.0.0.108/32 table 1 # inbound for eth0 ip route add default via 10.0.0.1 dev eth0 table 1 ip rule add from 10.0.0.100/32 table 2 # outbound for eth1 ip rule add to 10.0.0.100/32 table 2 # inbound for eth1 ip route add default via 10.0.0.1 dev eth1 table 2
Обратите внимание, что вы используете один и тот же шлюз (10.0.0.1) для обоих интерфейсов. Вам нужно проверить, существует ли этот шлюз в обеих подсетях (подсеть eth0 и eth1). Если нет, это может быть причиной проблемы.
-
Корректировка маршрутов:
Вам следует добавить отдельные шлюзы для каждого интерфейса. Проверьте доступные маршруты с помощью командыip route show
, чтобы убедиться, что у вас есть корректные маршруты для каждого интерфейса. Например, если eth0 имеет другой шлюз (например, 10.0.0.254), то стоит исправить вашу конфигурацию следующим образом:ip route add default via 10.0.0.254 dev eth0 table 1
-
Обновление правил маршрутизации:
Измените правила маршрутизации так, чтобы убедиться, что они не пересекаются. Например, если вы добавите правила только для исходящего трафика, это может предотвратить конфликты:ip rule add from 10.0.0.108/32 table 1 ip route add default via 10.0.0.254 dev eth0 table 1 ip rule add from 10.0.0.100/32 table 2 ip route add default via 10.0.0.1 dev eth1 table 2
-
Проверка конфигурации iptables:
Убедитесь, что на вашем сервере нет правил iptables, которые могут блокировать пакеты из eth0. Вы можете проверить текущие правила с помощью команды:iptables -L -v -n
Если какие-то правила блокируют трафик, стоит их удалить или изменить.
-
Тестирование конфигурации:
После внесения изменений протестируйте связь через eth0, используя команду:ping -I eth0 8.8.8.8
Если пинги все еще не проходят, попробуйте использовать
tracepath
илиtraceroute
, чтобы определить, где происходит потеря пакетов. -
Логирование и мониторинг:
Включите логирование для iptables и используйте утилиты, такие какtcpdump
, для отслеживания трафика. Это поможет вам увидеть, какие пакеты проходят через интерфейсы и где могут возникать проблемы.tcpdump -i eth0
-
Дополнительные настройки:
В зависимости от вашей сетевой конфигурации, может потребоваться использование более сложных методов маршрутизации, таких как policy-based routing. Если ваши требования выходят за рамки простых правил, посмотрите документацию по LARTC или другим специализированным ресурсам.
Заключение
После выполнения указанных выше шагов, ваша конфигурация должна обеспечить корректную работу как eth0, так и eth1. Убедитесь, что сетевые настройки и правила маршрутизации ни в коем случае не конфликтуют, а также перезагрузите систему, чтобы применить изменения.
Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью к более опытным администраторам или сообщества в сети.