IT GURU

Публикация виртуального сервера через VPN канал к VDS

Есть у меня VDS в США, с внешним IP адресом. Возникла необходимость опубликовать некоторый сервис, который крутится на локальной VM (например, сервер терминалов — стандартный порт RDP 3389) , на этом IP…

В этой статье я попробую по пунктам описать процесс настройки.

И так, что у нас есть:

  1.  Виртуальный сервер VDS на базе CentOS с внешним IP адресом
  2. Виртуальный сервер Windows за роутером с динамическим «серым» IP


Для создания VPN туннеля будем использовать  SoftEther VPN (мультифункциональный  и мультиплатформенный  сервер\клиент -заслуживает отдельного поста, как-нибудь расскажу о нем подробнее). Необходимый нам функционал VPN туннеля требует поддержку TUN/TAP в ядре (штатное ядро скорее всего уже собрано как надо), со стороны SoftEther VPN создаем Local Bridge, смотри скриншот:

Назначаем статический IP адрес созданному TAP интерфейсу, например вот такой:

DEVICE=tap_tap0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.11.12.13
NETMASK=255.255.255.0
GATEWAY=%IP_External_Device%
NETWORK=10.11.12.0

Со стороны локальной виртуальной машины устанавливаем SoftEther VPN в режиме Client, после установки настраиваем подключение к серверу (автоматически создается новый сетевой адаптер):

 

Настраиваем на нем статический IP адрес и указываем в качестве шлюза IP адрес VPN сервера.

На сервере пропишем правила для iptables:

******************************************************************************************************
iptables -F
iptables -t nat -F
iptables -t mangle -F

******************************************************************************************************

iptables -A FORWARD -i %External_IFACE_Name% -j ACCEPT
iptables -A FORWARD -o %External_IFACE_Name% -j ACCEPT
iptables -t nat -A POSTROUTING -o %External_IFACE_Name%  -j MASQUERADE

iptables -A FORWARD -i %External_IFACE_Name% -p tcp —dport %Target_Local_Port% -d  %Target_Local_IP% -j ACCEPT
iptables -t nat -A PREROUTING -d %External_IFACE_IP% -p tcp -m tcp —dport %Target_Local_Port% -j DNAT —to-destination %Target_Local_IP:Local_Port%
iptables -t nat -A POSTROUTING -o %External_IFACE_Name% -j SNAT —to-source %External_IFACE_IP%

 

******************************************************************************************************
iptables -A INPUT -p all -m conntrack —ctstate INVALID -j DROP
# Drop sync
iptables -A INPUT -i %External_IFACE_Name% -p tcp ! —syn -m conntrack —ctstate NEW -j REJECT —reject-with tcp-reset
# Drop Fragments
iptables -A INPUT -i %External_IFACE_Name% -f -j DROP
# Reject spoofed packets
iptables -A INPUT -s 127.0.0.1/8 ! -i lo -j DROP
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
# drop connect to X-server (реально некоторые гении ломятся)
iptables -A INPUT -i %External_IFACE_Name% -p tcp -m multiport -m tcp —dports 6000:6065 -j REJECT —reject-with tcp-reset
#
iptables -A INPUT -i %External_IFACE_Name% -p all -m conntrack —ctstate RELATED,ESTABLISHED,NEW -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

Exit mobile version