Iptables
使用 iptables 將輔助網路介面流量以及埠轉發重定向到 tun0 (OpenVPN)
我有一個 NAS 伺服器,我應該為它做埠轉發,以便從網際網路訪問它的服務。但是我的 ISP 阻止了埠,所以我設法給自己買了一個便宜的 Ubuntu VPS 來在那裡執行 OpenVPN 伺服器,然後以某種方式將整個 NAS 流量和所需的埠重定向到那裡。
我的設置如下:
+--------------------------------+ | Raspi | (192.168.0.101/24)| |(192.168.1.1/24) (192.168.0.1/24) AP<>=================={wlan0 eth0}================<>NAS (192.168.1.102/24) | \ / | | +----------------------+ | | | iptables and | | | | routing engine | | | +-----------+----------+ | | | | | {tun0} | | 10.8.0.6 | +--------------------------------+
我猜 VPS 端配置正確,因為我可以使用我的 VPS IP SSH 到我的 Raspberry Pi。這就是我在那裡所做的,以使其發揮作用:
iptables -t nat -A PREROUTING -d A.B.C.D -p tcp --dport 22 -j DNAT --to-dest 10.8.0.6:22 iptables -t nat -A POSTROUTING -d 10.8.0.6 -p tcp --dport 22 -j SNAT --to-source 10.8.0.1
我的 OpenVPN 伺服器配置:
port X proto udp dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt client-config-dir ccd push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3
我也做過:
sysctl -w net.ipv4.ip_forward=1
並放入
DEFAULT_FORWARD_POLICY="ACCEPT"
並/etc/default/ufw
添加# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES
到
/etc/ufw/before.rules
OpenVPN 客戶端配置:
client dev tun proto udp remote A.B.C.D X resolv-retry infinite nobind user nobody group nogroup persist-key persist-tun ns-cert-type server comp-lzo verb 3 <ca> XXX </ca> <cert> YYY </cert> <key> ZZZ </key>
如何將 eth0 流量重定向到 tun0 並通過隧道轉發埠 Y 和 Z?
我只知道對於其他埠,我應該像對埠 22 所做的那樣相應地重新配置我的 VPS。
我已經設法使用以下命令重定向我的 Raspi 上的流量:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o tun0 -j MASQUERADE
當我從 NAS 跟踪路由時,它會通過隧道。現在我只需要在這個隧道中轉發埠。
更新(解決整個項目):
經過數小時的搜尋,我終於找到了正確的埠轉發命令。我在我的 Raspi 上執行了以下命令:
iptables -t nat -I PREROUTING -p tcp -i tun0 -d 10.8.0.6 --dport <port> -j DNAT --to 192.168.1.102:<port> iptables -I FORWARD -p tcp -i tun0 -d 192.168.1.102 --dport <port> -j ACCEPT
還有我的 VPS 上的這些命令,就像我在這個執行緒開始時對埠 22 所做的那樣:
iptables -t nat -A PREROUTING -d 217.160.14.45 -p tcp --dport <port> -j DNAT --to-dest 10.8.0.6:<port> iptables -t nat -A POSTROUTING -d 10.8.0.6 -p tcp --dport <port> -j SNAT --to-source 10.8.0.1
所以現在我繞過了我的 ISP 的防火牆,我可以使用 VPS 端的埠轉發訪問我的 NAS 及其服務。您可以將其用作教程 :)