Были времена, когда на Белтелекомовском домашнем роутере можно было сделать проброс портов, придти на работу и попасть по сети домой с использованием DynDNS. Это было давно и уже не правда. Сейчас всё за NAT-ами. Проброс на роутере совсем не актуален для домашнего использования.
Мой Кубик на данный момент является точкой доступа из сети к домашним устройствам. Схема проста.
- На Кубике поднят VPN (Hamachi).
- На кубике сделан проброс портов iptables.
Эта тема более актуальна для специфических протоколов, так как для проброса HTTP из сети через кубик на домашнее устройство можно обойтись Webmin. Да у него есть такая возможность - редирект в домашней сети и прячется во вкладке HTTP Tunnel.
Если надо попасть в SSH или заходить на Webmin неудобно, то применим колдунство iptables.
Однако, давай по порядку. Сначала VPN.
#!/bin/bash E_MAIL=$1 # https://www.vpn.net/linux wget https://www.vpn.net/installers/logmein-hamachi_2.1.0.203-1_armhf.deb dpkg -i logmein-hamachi_2.1.0.203-1_armhf.deb hamachi login hamachi attach E_MAIL
Проще, наверное, и не бывает. Регистрируешься, смотришь версию, устанавливаешь, в webe подключаешь свои точки к сети и делаешь прочие настройки. Теперь твои устройства связаны в своей собственной сети. Бесплатный тариф ограничен пятью точками. Но ко всей домашней локальной сети можно достучаться с Кубика при поднятом Hamachi только на нём. Для удобства делаем проброс порта.
Сервер - это девайс в локальной сети, к которому мы стучимся из VPN (192.168.100.15).
Шлюз - это Кубик.
Неправильный порт - порт, по которому из VPN мы получим доступ к девайсу (90).
#!/bin/bash EXT_IP="xxx.xxx.xxx.xxx" # внешний VPN, реальный IP-адрес шлюза INT_IP="xxx.xxx.xxx.xxx" # реальный IP-адрес шлюза в локальной сети EXT_IF=ham0 # Внешний и внутренний интерфейсы. INT_IF=eth0 # Для шлюза они вряд ли изменятся, поэтому можно прописать вручную. 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
Пример использования скрипта
port_forward.sh 90 192.168.100.15 80Теперь, если мы постучимся в кубик по его VPN-адресу на порт 90, то мы попадём на 80-ый порт по адресу в локальной сети 192.168.100.15
Это колдунство взято из этой статьи - Проброс и перенаправление портов в iptables
Сохранить таблицы и восстановить после пеерзагрузки:
apt-get install iptables-persistent systemctl enable netfilter-persistent iptables-save > /etc/iptables/rules.v4
Комментариев нет:
Отправить комментарий