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
233 +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 Апр 2024 в 13:14
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир