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'ом.
Кажется, проблема может быть связана с тем, что у вас происходят два уровня 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. Если проблема останется, попробуйте также убедиться, что правильно настроены маршруты и фильтрация пакетов на обоих роутерах.
Кажется, проблема может быть связана с тем, что у вас происходят два уровня 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. Если проблема останется, попробуйте также убедиться, что правильно настроены маршруты и фильтрация пакетов на обоих роутерах.