我在 192.168.0.3 上安装了 OpenVPN 服务器,其 IP 地址为 10.10.10.1。我可以从 Internet 连接到我的 OpenVPN 服务器,连接已创建。现在我在 LAN 上有一个服务器,其 IP 地址为 192.168.0.11,我想将其公开给 VPN,其 IP 地址为 10.10.10.11。我该怎么做?我事先不知道客户端将使用哪些端口。
我尝试的是这样的:
iptables -t nat -D PREROUTING -d 10.10.10.11 -j DNAT --to-destination 192.168.0.11
但如果我在上述 OpenVPN 服务器上尝试,
telnet 10.10.10.11 80
它不起作用,而
telnet 192.168.0.11 80
連接。
我还在服务器上启用了 IP 转发,使用
echo 1 > /proc/sys/net/ipv4/ip_forward
有什么提示吗?谢谢!!
答案1
iptables -t nat -I PREROUTING -d 10.10.10.11 -j DNAT --to-destination 192.168.0.11
但如果我在上述 OpenVPN 服务器上尝试,
telnet 10.10.10.11 80
原则上,这不会起作用,因为您正在尝试另一种用例。如果您直接从 openVPN 服务器访问,则正确的链将是iptables -t nat -I OUTPUT
,而iptables -t nat -I PREROUTING
将应用于转发流量(例如 openvpn 客户端)。如果您还添加此规则,它将起作用(至少部分起作用)。
iptables -t nat -I OUTPUT -d 10.10.10.11 -j DNAT --to-destination 192.168.0.11
这种方法原则上可行,但您需要覆盖返回路径 - 路由(@192.168.0.11)和防火墙规则以允许流量(@192.168.0.3/10.10.10.1)。
路由
192.168.0.11 上的静态路由
由于此规则只会更改目标 IP 而不是源 IP,因此服务器 192.168.0.11 必须知道如何到达通信的发起者。其中一个选项是在主机 192.168.0.11 上为用于 openVPN 客户端的子网添加静态路由。然后它应该可以工作。
ip route add 10.10.10.0/24 via 192.168.0.3
将配置推送至 openVPN 客户端
另一种选择是甚至不重写地址,而只是将路由传递给客户端。您可以只推送一个 IP(192.168.0.11/32):
push "route 192.168.0.11 255.255.255.255"
或子网 192.168.0.0/24
push "route 192.168.0.0 255.255.255.0"
这取决于您需要的具体用例。
注意:如果您在服务器端使用 openVPN 2.3+,则可以使用 openvpn 功能而不是 iptables 规则(它仅适用于 openvpn 流量):
client-nat dnat 10.10.10.11 255.255.255.255 192.168.0.3
防火墙
iptables -I FORWARD -s 192.168.0.11 -d 10.10.10.0/24 -j ACCEPT
或者
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT