
У меня есть 3 устройства:
- Сервер, подключенный к Network1
- Ноутбук, подключенный к Network2
- Raspberry Pi, также подключенный к Network2
В Network1 также имеется сервер OpenVPN, а также переадресация портов для доступа к VPN.
Мне нужно, чтобы Raspi получал TCP-запросы (предназначенные для сервера) с ноутбука и отправлял их через VPN на сервер, а затем отправлял ответ с сервера обратно на ноутбук. Будет использоваться только один порт, но было бы неплохо, если бы все порты были перенаправлены. На ноутбук нельзя устанавливать никакое программное обеспечение. Также желательно, чтобы на ноутбуке не было команд и т. п.
Мне нужна какая-то "переадресация портов", но в VPN
решение1
Используйте буквально ту же самую «переадресацию портов», т.е. правила DNAT в брандмауэре маршрутизатора (RasPi); она работает одинаково независимо от типа сети.
То есть добавьте DNAT
правила iptables или nftables в брандмауэр RasPi для каждого «перенаправления портов», которое вам нужно. (Не забудьте также добавить правила «разрешения перенаправления» — они автоматические в большинстве маршрутизаторов, но не автоматические в простых iptables или nftables.)
Ваш сервер должен иметь маршрут обратно в Network2 через свое VPN-подключение (в OpenVPN это, скорее всего, означает конфигурацию iroute
). Если это сложно настроить, альтернативой является то, чтобы RasPi также делал DNAT-ing SNAT
или MASQUERADE
в дополнение к нему. (Вариант SNAT/MASQ будет точно таким же типом конфигурации, как и для «NAT hairpinning» в локальных сетях.)
Пример для nftables:
table inet filter { chain forward { type filter hook forward priority filter; ip daddr <ServerIP> accept } } table ip nat { chain prerouting { type nat hook prerouting priority dstnat; iifname "eth0" ip daddr <RasPiIP> tcp dport 80 \ dnat to <ServerIP>:80 } chain postrouting { type nat hook postrouting priority srcnat; oifname "tun0" masquerade } }
Пример для iptables:
-t filter -I FORWARD -d <ServerIP> -j ACCEPT -t nat -I PREROUTING -i eth0 -d <RasPiIP> -p tcp --dport 80 \ -j DNAT --to-destination <ServerIP>:80 -t nat -I POSTROUTING -o tun0 -j MASQUERADE
Альтернатива: используйте "обратный прокси" на RasPi. Большинство обратных прокси предназначены для HTTP/HTTPS, но любой протокол TCP или TLS может быть проксирован. Это не будет работать с UDP (по крайней мере, нелегко) и потребует дополнительного программного обеспечения, но имеет меньше требований к маршрутизации.
Для служб HTTP/HTTPS обычным выбором будут Nginx или Apache httpd; они подробно документированы в других местах. (В обоих случаях эта опция называется «proxy_pass» или «ProxyPass».)