iptables nat, ping работает, но нет UDP/TCP

Вопрос или проблема

У меня проблема с моими NAT правилами. Здесь вы можете увидеть маршрут

маршрут

Ping к публичному IP, например, 8.8.8.8, возможен со всех устройств (ПК, EVB 1, EVB 2).

Но UDP/TCP запросы от EVB 2 отправляются, но ответа нет. ПК и EVB 1 могут взаимодействовать по TCP/UDP как задумано. Я тестировал с DNS запросом к внутреннему DNS серверу и увидел такое поведение. На мой взгляд, правило NAT на стороне ПК не работает. Исходный IP адрес не переводится в 10.61.128.97, поэтому DNS сервер не может ответить.

tcpdump на ПК:enp0s31f6 (ping google.com на EVB 2):

192.168.21.85.49640 > 10.61.8.3.53: [плохая контрольная сумма udp 0xd1cc -> 0x0495!] 15613+ A? google.com. (28)
192.168.21.85.49640 > 10.61.8.3.53: [плохая контрольная сумма udp 0xd1cc -> 0x0495!] 15613+ A? google.com. (28)

tcpdump на ПК:enp0s31f6 (ping google.com на EVB 1):

09:16:37.078577 IP 10.61.128.97.44859 > 10.61.8.3.53: 38709+ A? google.com. (28)
09:16:37.078587 IP 10.61.128.97.44859 > 10.61.8.3.53: 29483+ AAAA? google.com. (28)
09:16:37.078901 IP 10.61.8.3.53 > 10.61.128.97.44859: 29483 2/0/0 CNAME forcesafesearch.google.com., AAAA 2001:4860:4802:32::78 (86)
09:16:37.078902 IP 10.61.8.3.53 > 10.61.128.97.44859: 38709 2/0/0 CNAME forcesafesearch.google.com., A 216.239.38.120 (74)

Ниже мои правила NAT

### Правила NAT ПК
# Сгенерировано iptables-save v1.8.4 в Ср Окт 9 09:25:47 2024
*filter
:INPUT ACCEPT [1388199:1181620222]
:FORWARD ACCEPT [68:6201]
:OUTPUT ACCEPT [557234:439242392]
-A INPUT -j LOG --log-prefix "IPTables-TOBIAS "
-A FORWARD -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 53 -j ACCEPT
COMMIT
# Завершено в Ср Окт 9 09:25:47 2024
# Сгенерировано iptables-save v1.8.4 в Ср Окт 9 09:25:47 2024
*nat
:PREROUTING ACCEPT [318544:51408181]
:INPUT ACCEPT [72160:10063570]
:OUTPUT ACCEPT [16277:1250798]
:POSTROUTING ACCEPT [16277:1250798]
-A POSTROUTING -s 192.168.21.85/32 -o enp0s31f6 -j MASQUERADE
-A POSTROUTING -j LOG --log-prefix "POSTROUTING: "
COMMIT

### Правила NAT EVB 1 
Сгенерировано iptables-save v1.6.0 в Чт Окт 3 04:49:47 2024
*nat
:PREROUTING ACCEPT [22:1393]
:INPUT ACCEPT [6:373]
:OUTPUT ACCEPT [38:2824]
:POSTROUTING ACCEPT [38:2824]
-A POSTROUTING -s 192.168.10.2/32 -o eth0 -j MASQUERADE
COMMIT
# Завершено в Чт Окт 3 04:49:47 2024
# Сгенерировано iptables-save v1.6.0 в Чт Окт 3 04:49:47 2024
*filter
:INPUT ACCEPT [206599:417912866]
:FORWARD ACCEPT [164:13190]
:OUTPUT ACCEPT [262956:228460301]
-A FORWARD -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 53 -j ACCEPT
COMMIT

Я также тестировал “-j SNAT –to 10.61.128.97” без успеха.

Ответ или решение

Проблема, которую вы описали, кажется связанной с правилами NAT (Network Address Translation) в вашей конфигурации iptables. Давайте проанализируем вашу ситуацию и предложим возможные решения.

Анализ ситуации

Вы сообщаете, что пинг до публичного IP, такого как 8.8.8.8, работает с всех устройств, но UDP/TCP запросы от EVB 2 не получают ответ. На основе предоставленной информации и tcpdump’ов можно сделать несколько выводов:

  1. Работа пинга: Это говорит о том, что основная маршрутизация настроена правильно, и пакеты ICMP проходят через NAT.

  2. Проблемы с UDP/TCP: Если запросы от EVB 2 отправляются, но не получают ответ, это может указывать на проблемы с трансляцией IP-адресов. Конкретно, вы упомянули, что исходный IP-адрес не переводится на 10.61.128.97, что мешает DNS-серверу отправить ответ обратно.

  3. Правила NAT: В текущей конфигурации ваши правила для NAT могут быть настроены неправильно. Вы используете MASQUERADE, но убедитесь, что у вас есть соответствующие правила фильтрации для разрешения входящих и исходящих пакетов.

Рекомендации по исправлению

Давайте внесем несколько изменений в ваши правила iptables:

  1. Добавьте SNAT правило: Хотя вы уже пробовали SNAT, возможно, стоит попробовать, как вариант, указать более широкий диапазон IP-адресов или использовать более общий подход:
-A POSTROUTING -s 192.168.21.0/24 -o enp0s31f6 -j SNAT --to-source 10.61.128.97

Этот вариант предполагает, что ваш локальный диапазон IP-адресов — 192.168.21.0/24. Если это не так, замените его на актуальный для вашей сети.

  1. Настройка входящих пакетов: Убедитесь, что в правилах фильтрации указаны разрешения для возвращающихся пакетов. Обратите внимание на следующих правилах во всех секциях filter:
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Этот правило позволит устанавливать соединения, которые были инициированы изнутри сети (EVB 1 и EVB 2) и позволят им получать ответы.

  1. Логирование ошибок: Чтобы дополнительно локализовать проблему, добавьте логирование для неудачных пакетов:
-A INPUT -m state --state INVALID -j LOG --log-prefix "INVALID DROP: "
-A FORWARD -m state --state INVALID -j LOG --log-prefix "INVALID DROP: "

Эти правила помогут вам видеть, если какие-либо пакеты отбиваются.

Тестирование

  1. Применив изменения, протестируйте снова DNS-запросы с EVB 2.
  2. Используйте tcpdump на интерфейсе, чтобы посмотреть, проходят ли пакеты через IP-адреса, которые вы ожидаете.

Заключение

Приведенные шаги должны помочь вам настроить NAT так, чтобы ваши UDP/TCP запросы начали работать как ожидалось. Если проблема сохранится, может потребоваться дальнейшая диагностика сети, включая проверку маршрутизации, правил брандмауэра и даже состояния сетевых интерфейсов. Если у вас есть дополнительные лог-файлы или результаты тестов, предоставьте их, чтобы мы могли более детально проанализировать вашу проблему.

Оцените материал
Добавить комментарий

Капча загружается...