У меня есть сервер Debian с IP 10.10.10.5 и компьютер с Windows с IP 10.10.10.7. Я планирую сделать так, чтобы сервер Debian перенаправлял весь трафик RDP на компьютер с Windows с помощью следующих правил iptables:
iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 10.10.10.7:3389
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT
Но почему-то не работает. Я установил переадресацию IPv4 на «1».
Когда я подключаюсь напрямую к компьютеру с Windows из локальной сети, он устанавливает соединение RDP, но не работает через сервер. Nmap из 10.10.10.5 возвращает «отфильтрованный» для 3389, но Nmap из 10.10.10.7 возвращает «открыто». В чем может быть проблема?
Поскольку кажется, что все машины находятся в одной подсети, компьютер с Windows будет пытаться отвечать напрямую клиенту, минуя поле NAT (уровень 2).
Вы также должны отвечать на пакеты SNAT, добавляя:
iptables -t nat -A POSTROUTING -s 10.10.10.7 -p tcp --sport 3389 -j SNAT --to 10.10.10.5
В дополнение к SNAT подойдет и МАСКАРАД, который немного упростит его. MASQUERADE - это SNAT, за исключением того, что вместо указания IP-адреса вы указываете интерфейс; это означает, что вам не нужно будет добавлять правила POSTROUTING, если, например, вы добавляете дополнительные переадресации портов.
iptables -t nat -A POSTROUTING -o $out_interface -j MASQUERADE
Теоретически не должно быть никаких практических различий или разницы в производительности, за исключением того, что ядру необходимо отслеживать SNAT, а не MASQUERADE.