Iptables

使用 iptables 將輔助網路介面流量以及埠轉發重定向到 tun0 (OpenVPN)

  • April 3, 2016

我有一個 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 及其服務。您可以將其用作教程 :)

引用自:https://unix.stackexchange.com/questions/273926