Windows за двойным NAT, как правильно направить трафик? Всем привет.
Имеем Proxmox с внешним IP-адресом, на нём три Windows Server 2016 и FreeBSD в качестве шлюза для них (нужен для схемы GRE over IPsec). NAT (masquerade) происходит между Proxmox и FreeBSD (через iptables) и между FreeBSD и серверами на Windows (через pf). Пакетные фильтры пока выключены в обоих роутерах, роутинг включен.
Проблема в том, что у FreeBSD никаких проблем, через NAT поднимаются даже GRE с IPsec'ом, а с Windows проходит только пинг. То есть пингануть 8.8.8.8 я могу, а получить от него DNS-ответ - нет; пинг до другого сервера за удалённым шлюзом ходит, RDP - нет.
Что интересно, tcpdump внешнего интерфейса на Proxmox'е показывает, что запросы от FreeBSD уходят с внешним source IP, а такие же запросы от Windows - с внутренним, который отнатился один раз, т. е. как будто второй NAT не происходит. Интересно, что даже внутри GRE-туннеля, когда натятся уже пакеты GRE, Windows терпит крах.
Где может быть проблема? В iptables банальный postrouting masquerade, основанный на source IP, на FreeBSD просто nat on wan all -> wan. Может быть, я дико туплю и не вижу чего-то очевидного или просто недостаточно глубоко знаю технологии.
Спасибо.
P. S.
Вывод tcpdump: первые 8 строк это, очевидно, пинги, последние 5 - nslookup ya.ru 8.8.8.8, всё с сервера Windows. Очень странно.
~# tcpdump -n host 8.8.8.8
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:25:40.687072 IP x.x.203.43 > 8.8.8.8: ICMP echo request, id 4854, seq 74, length 40
18:25:40.715676 IP 8.8.8.8 > x.x.203.43: ICMP echo reply, id 4854, seq 74, length 40
18:25:41.695257 IP x.x.203.43 > 8.8.8.8: ICMP echo request, id 4854, seq 75, length 40
18:25:41.723833 IP 8.8.8.8 > x.x.203.43: ICMP echo reply, id 4854, seq 75, length 40
18:25:42.710761 IP x.x.203.43 > 8.8.8.8: ICMP echo request, id 4854, seq 76, length 40
18:25:42.739347 IP 8.8.8.8 > x.x.203.43: ICMP echo reply, id 4854, seq 76, length 40
18:25:43.726352 IP x.x.203.43 > 8.8.8.8: ICMP echo request, id 4854, seq 77, length 40
18:25:43.754949 IP 8.8.8.8 > x.x.203.43: ICMP echo reply, id 4854, seq 77, length 40
18:26:06.450895 IP 10.6.100.2.56611 > 8.8.8.8.53: 1+ PTR? 8.8.8.8.in-addr.arpa. (38)
18:26:08.462490 IP 10.6.100.2.58269 > 8.8.8.8.53: 2+ A? ya.ru. (23)
18:26:10.462353 IP 10.6.100.2.65350 > 8.8.8.8.53: 3+ AAAA? ya.ru. (23)
18:26:12.477537 IP 10.6.100.2.55766 > 8.8.8.8.53: 4+ A? ya.ru. (23)
18:26:14.494460 IP 10.6.100.2.60016 > 8.8.8.8.53: 5+ AAAA? ya.ru. (23)
Вывод таблицы NAT iptables на Proxmox'е:
~# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:ssh to:10.6.100.2
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.6.100.0/30 anywhere
10.6.100.0/30 - это сеть между FreeBSD и Proxmox'ом.

21 Авг 2019 в 06:42
207 +1
1
Ответы
1

Кажется, проблема может быть связана с тем, что у вас происходят два уровня NAT. Если я правильно понял схему вашей сети, сначала происходит NAT на Proxmox между внешним и внутренним IP-адресом, затем еще один NAT на FreeBSD между внутренним IP-адресом и внешним.

Для того чтобы корректно направить трафик через два уровня NAT на Windows сервера, вам нужно настроить правильные правила iptables на Proxmox и pf на FreeBSD.

На Proxmox вы уже настроили masquerade для сети между Proxmox и FreeBSD. Но, возможно, вам нужно также добавить правило SNAT для исходящего трафика от Windows серверов, чтобы он имел внешний адрес Proxmox в качестве source IP. Например:iptables -t nat -A POSTROUTING -s 10.6.100.0/30 -j SNAT --to-source внешний_IP_ProxmoxНа FreeBSD, помимо правила nat on wan для сети между FreeBSD и Windows серверами, вам также нужно добавить правило rdr для перенаправления трафика от внешнего адреса на внутренний адрес Windows сервера. Например:rdr on em0 proto tcp from any to ваш_внешний_IP_Proxmox port = ваш_порт -> внутренний_IP_Windows порт ваш_порт

После настройки этих правил перезагрузите iptables на Proxmox и pf на FreeBSD, чтобы изменения вступили в силу. После этого попробуйте снова проверить доступность DNS-серверов и RDP с серверов Windows. Если проблема останется, попробуйте также убедиться, что правильно настроены маршруты и фильтрация пакетов на обоих роутерах.

20 Апр в 13:14
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 117 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир