
我有 3 台設備:
- 連接 Network1 的伺服器
- 一台筆記型電腦,連接到 Network2
- Raspberry Pi,也連接到 Network2
Network1 上還有一個 openVPN 伺服器,以及用於存取 VPN 的連接埠轉送。
我需要 Raspi 從筆記型電腦接收 TCP 請求(針對伺服器)並透過 VPN 將它們傳送到伺服器,然後將伺服器的回應傳送回筆記型電腦。只會使用一個端口,但如果所有端口都轉發也可以。筆記型電腦上無法安裝任何軟體。筆記型電腦上最好也沒有指令等。
我需要某種“連接埠轉送”但進入 VPN
答案1
使用字面上相同的“連接埠轉送”,即路由器(RasPi)防火牆中的 DNAT 規則;無論網路類型如何,它的功能都相同。
也就是說,DNAT
為您需要的每個「連接埠轉送」將 iptables 或 nftables 規則新增至 RasPi 防火牆。 (不要忘記還添加“允許轉發”規則 - 這些規則在大多數路由器中是自動的,但在普通 iptables 或 nftables 中不是自動的。)
您的伺服器必須有一條透過其 VPN 連線返回 Network2 的路由(在 OpenVPN 中,這可能意味著設定iroute
)。如果設定起來很困難,另一個選擇是讓 RasPi 也執行 DNAT 操作SNAT
或MASQUERADE
除了 DNAT 之外還執行此操作。 (SNAT/MASQ 選項與 LAN 中的「NAT 髮夾」配置完全相同。)
nftable 的範例:
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”。)