Как настроить на VPS iptables и на mikrotik firewall чтоб при обращении по внешнему “белому” IP получить доступ например к WWW серверу в локальной сети ?
Для этого нам понадобится VPS-сервер с VPN туннелем в домашнюю сеть. Нам не нужно покупать статический IP-адрес у провайдера, и даже если вы находитесь за NAT, все равно сделать доступными в интернете свои локальные сервисы.
Подготовка VPS
В первую очередь нужно получить VPS сервер коих полно в сети. Поискать можно например на lowendstock.com, я же использую и вам советую отличный сервис RackNerd.com (ссылка реферальная, при переходе по ней получаете бонус) в котором всего за 12 USD можно получить сервер на целый год!
Установка и настройка VPN
Настройка своего собственный сервера IPsec VPN можно выполнить всего за несколько минут с использованием IPsec / L2TP и Cisco IPsec в Ubuntu, Debian и CentOS с помощью скрипта vpnsetup.sh от hwdsl2.
IPsec VPN шифрует ваш сетевой трафик, так что никто между вами и VPN-сервером не может перехватить ваши данные, когда они передаются через Интернет.
Установка очень проста, для этого, в консоли VPS введите следующую строку (при необходимости, можно изменить учетные данные отредактировав скрипт):
wget https://git.io/vpnsetup -O vpnsetup.sh && sudo sh vpnsetup.sh
Если вы используете CentOS, то замените в ссылке выше https://git.io/vpnsetup на https://git.io/vpnsetup-centos. Ваши данные для входа в VPN будут сгенерированы случайным образом и отобразятся на экране после выполнения скрипта.
OpenVZ VPS не поддерживается.
Для более детальной настройки установки можно воспользоваться несколькими вариантами:
Вариант 1
Автоматическая установка с генерацией случайных учетных данных VPN (будут отображены по завершении):
wget https://git.io/vpnsetup -O vpnsetup.sh && sudo sh vpnsetup.sh
Вариант 2
Отредактируйте скрипт и укажите свои собственные учетные данные VPN:
wget https://git.io/vpnsetup -O vpnsetup.sh
nano -w vpnsetup.sh
[Впишите ваши учетные данные: YOUR_IPSEC_PSK, YOUR_USERNAME и YOUR_PASSWORD]
sudo sh vpnsetup.sh
Примечание: Ключ IPsec PSK должен быть из 20 случайных символов.
Вариант 3
Укажите свои учетные данные VPN как переменные среды:
# Все значения должны быть заключены в одиночные кавычки
# Не используйте эти специальные символы: \ " '
wget https://git.io/vpnsetup -O vpnsetup.sh && sudo \
VPN_IPSEC_PSK='ваш_ipsec_pre_shared_ключ' \
VPN_USER='ваше_vpn_имя_пользователя' \
VPN_PASSWORD='ваш_vpn_пароль' \
sh vpnsetup.sh
Маршрутизация
Для пробросать порта, например 80 и 443 до сервера в локальной сети, в консоли VPS выполнить следующее:
# http 80
iptables -t nat -A PREROUTING --dst xxx.xxx.xxx.xxx -p tcp --dport 80 -j DNAT --to-destination 192.168.42.10
iptables -t nat -A POSTROUTING --dst 192.168.42.10 -p tcp --dport 80 -j SNAT --to-source 192.168.42.1
iptables -t nat -A OUTPUT --dst xxx.xxx.xxx.xxx -p tcp --dport 80 -j DNAT --to-destination 192.168.42.10
iptables -I FORWARD 1 -i ens3 -o ppp0 -d 192.168.42.10 -p tcp -m tcp --dport 80 -j ACCEPT
# https 443
iptables -t nat -A PREROUTING --dst xxx.xxx.xxx.xxx -p tcp --dport 443 -j DNAT --to-destination 192.168.42.10
iptables -t nat -A POSTROUTING --dst 192.168.42.10 -p tcp --dport 443 -j SNAT --to-source 192.168.42.1
iptables -t nat -A OUTPUT --dst xxx.xxx.xxx.xxx -p tcp --dport 443 -j DNAT --to-destination 192.168.42.10
iptables -I FORWARD 1 -i ens3 -o ppp0 -d 192.168.42.10 -p tcp -m tcp --dport 443 -j ACCEPT
где: xxx.xxx.xxx.xxx – внешний “белый” IP вашего VPS, 192.168.42.1 – IP ppp0 интерфейса VPS, 192.168.42.10 – IP клиента VPN, в нашем случает это Mikrotik в локальной сети.
Далее нужно добавить в правила Firewall Mikrotik следующее:
/ip firewall nat
add chain=dstnat action=dst-nat to-addresses=192.168.1.100 to-ports=80 protocol=tcp dst-address=192.168.42.10 in-interface=l2tp_vpn1 dst-port=80 log=no log-prefix=""
add chain=dstnat action=dst-nat to-addresses=192.168.1.100 to-ports=443 protocol=tcp dst-address=192.168.42.10 in-interface=l2tp_vpn1 dst-port=443 log=no log-prefix=""
где: 192.168.1.100 – IP адрес нашего WWW сервера в локальной сети, l2tp_vpn1 – интерфейс нашего VPN подключения к VPS.
Вот и все, теперь при обращении к внешнему IP адресу xxx.xxx.xxx.xxx у нас будет открываться страница web-сервера из локальной сети.