@xsash

Как пробросить RDP порт через NAT, используя iptables?

Доброе время суток, либо мои знания скудны и ограничены, либо одно из двух...

Необходимо пробросить RDP порт через NAT. Использую rinetd - все просто и работает, но идет подмена источника, в логах вместо ip клиента указывается ip шлюза. Мучался с iptables - пошерстил сеть, не понимаю..

Оригинал iptables
#!/bin/bash

# LAN interface
IF0="eth0"
# WAN interface 1
IF1="eth1"

# IP WAN interface 1
IP1="110.120.130.205"

# gateway 1
P1="110.120.130.254"

# LAN netmask
P0_NET="10.0.0.0/24"
# WAN1 netmask
P1_NET="110.120.130.0/24"

####################

# Очищаем правила
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Запрещаем все, что не разрешено
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Разрешаем localhost и локалку
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $IF0 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o $IF0 -j ACCEPT

# Разрешаем пинги
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Разрешаем все исходящие подключения сервера
iptables -A OUTPUT -o $IF1 -j ACCEPT

# Разрешаем установленные подключения
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Отбрасываем неопознанные пакеты
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# Отбрасываем нулевые пакеты
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Закрываемся от syn-flood атак
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Разрешаем доступ из локалки наружу
iptables -A FORWARD -i $IF0 -o $IF1 -j ACCEPT

# Закрываем доступ снаружи в локалку
iptables -A FORWARD -i $IF1 -o $IF0 -j REJECT

# Переадресация 80 и 443 портов на прозрачный сквид
iptables -t nat -A PREROUTING -p tcp -m tcp -s 10.0.0.0/24 --dport 443 -j REDIRECT --to-ports 3443
iptables -t nat -A PREROUTING -p tcp -m multiport -s 10.0.0.0/24 --dports 80,81,82,88,1080,3127,3128,7900,8000,8080,8081,8088,8123,8888,9090 -j REDIRECT --to-ports 3080

# Включаем NAT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE

# Открываем порты
iptables -A INPUT -i $IF1 -p tcp --dport 55555 -j ACCEPT
iptables -A INPUT -i $IF1 -p tcp --dport 55554 -j ACCEPT

iptables -A INPUT -i $IF0 -p tcp --dport 123 -j ACCEPT
iptables -A INPUT -i $IF0 -p udp --dport 123 -j ACCEPT

# Открываем доступ к web серверу
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

# Сохраняем правила
/sbin/iptables-save  > /etc/iptables.rules
iptables-restore < /etc/iptables.rules


Пробовал
iptables -t nat -A PREROUTING -p tcp -m tcp -d 110.120.130.205 --dport 55554 -j DNAT --to-destination 10.0.0.10:3389
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 10.0.0.10 --sport 3389 -j SNAT --to-source 110.120.130.205:55554


iptables -t nat -A PREROUTING -d 110.120.130.205 -p tcp --dport 3389 -j DNAT --to-destination 10.0.0.10:3389
iptables -t filter -A FORWARD -m state --state NEW -p tcp --dport 3389 -j ACCEPT


Ни в одном случае не взлетело
  • Вопрос задан
  • 4672 просмотра
Пригласить эксперта
Ответы на вопрос 2
@mureevms
У Вас нет разрешающего правила для транзитных пакетов, приходящих на внешний интерфейс. Т.е. если дефолтная политика для цепочки FORWARD это DROP, то надо явно добавлять ACCEPT на каждый пробрасываемый порт, по аналогии как это сделано в цепочке INPUT. Не хочется копипастить, почитайте мою заметку, написанную специально для такого случая.
Ответ написан
msHack
@msHack
Есть способ проще

Yggdrasil это аналог hamachi с открытым кодом только лучше с его помощью можно создавать игровые сервера за нат, хостить сайты за нат, хостить ftp за нат, юзать rdp находясь за натом, Yggdrasil работает с любой программой которая поддерживает ipv6 ipv4

Качать тут https://yggdrasil-network.github.io/installation.html

ноды тут https://github.com/yggdrasil-network/public-peers/...

Установка Создаем папку yggdrasil кидаем ее в c:\Program Files качаем tap-windows-9.9.2_3 устанавливаем за тем качаем сам yggdrasil-0.3.12-windows-amd64.exe переименовываем в yggdrasil и кидаем в папку yggdrasil
создаем файл конфигурации командой
"C:\Program Files\Yggdrasil\yggdrasil.exe" -genconf > "C:\Program Files\Yggdrasil\yggdrasil.conf"

в конфиг добовляем ноды

Peers: [
tcp://a.b.c.d:xxxxx
socks://e.f.g.h:xxxxx/a.b.c.d:xxxxx
tls://a.b.c.d:xxxxx
]

запускаем yggdrasil
"C:\Program Files\Yggdrasil\yggdrasil.exe" -useconffile "C:\Program Files\Yggdrasil\yggdrasil.conf"

Видео https://www.youtube.com/watch?v=Hp1O-4fZbOE&t=94s
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы