使用 iptables 将辅助网络接口流量连同端口转发重定向到 tun0 (OpenVPN)

Redirect secondary network interface traffic along with port forwarding to tun0 (OpenVPN) using iptables

我有一个 NAS 服务器,我应该为它做端口转发,以便从 Internet 访问它的服务。然而,我的 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 及其服务。您可以将其用作教程:)