• Проброс портов для удаленного рабочего стола (RDP) через iptables

 #10292   IgorA100
 26 мар 2020, 23:05
ПЕРЕНАПРАВЛЕНИЕ ПОРТА (вариант 1):
Код: Выделить всё#!/bin/bash

IPTABLES='/usr/sbin/iptables'
IP_EXT=внешний адрес роутера
IP_INT=внутренний адрес роутера
SRDP_PORT=внешний порт на руотере
DRDP_PORT=реальный порт на RDP сервере
RDP_HOST_IP=ip RDP хоста

$IPTABLES -t nat -I PREROUTING --dst $IP_EXT -p tcp --dport $SRDP_PORT -j DNAT --to-destination $RDP_HOST_IP:$DRDP_PORT

$IPTABLES -t nat -I POSTROUTING -p tcp --dst $RDP_HOST_IP --dport $DRDP_PORT -j SNAT --to-source $IP_INT

$IPTABLES -t nat -I OUTPUT --dst $IP_EXT -p tcp --dport $SRDP_PORT -j DNAT --to-destination $RDP_HOST_IP:$DRDP_PORT

$IPTABLES -I FORWARD -i $IP_INT --dst $RDP_HOST_IP -j ACCEPT


ПЕРЕНАПРАВЛЕНИЕ ПОРТА (вариант 2):
Код: Выделить всё#!/bin/bash
EXT_IP="xxx.xxx.xxx.xxx" # внешний, реальный IP-адрес шлюза;
INT_IP="xxx.xxx.xxx.xxx" # См. выше.
EXT_IF=eth0 # Внешний и внутренний интерфейсы.
INT_IF=eth1 # Для шлюза они вряд ли изменятся, поэтому можно прописать вручную.
FAKE_PORT=$1  # Вначале передаём скрипту "неправильный" порт на внешнем интерфейсе,
LAN_IP=$2     # затем - локальный адрес сервера
SRV_PORT=$3   # и в конце - реальный порт для подключения к серверу

# Здесь опять надо сделать проверку ввода данных, потому что операции всё ещё серьёзные.

iptables -t nat -A PREROUTING -d $EXT_IP -p tcp -m tcp --dport $FAKE_PORT -j DNAT --to-destination $LAN_IP:$SRV_PORT
iptables -t nat -A POSTROUTING -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT -d $EXT_IP -p tcp -m tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT


ПРОБРОС ПОРТА:
Код: Выделить всё#!/bin/bash

EXT_IP="xxx.xxx.xxx.xxx" # внешний, реальный IP-адрес шлюза;
INT_IP="xxx.xxx.xxx.xxx" # См. выше.
EXT_IF=eth0 # Внешний и внутренний интерфейсы.
INT_IF=eth1 # Для шлюза они вряд ли изменятся, поэтому можно прописать вручную.
LAN_IP=$1   # Локальный адрес сервера передаём скрипту первым параметром,
SRV_PORT=$2 # а тип сервера, в смысле какой порт (или набор портов) открывать - вторым

# Здесь желательно сделать проверку ввода данных, потому что операции достаточно серьёзные.

iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT

Вызывается выполнение так:
Код: Выделить всё./rules.sh 192.168.1.52 20,21