我正在设置 OpenVPN 服务器。我希望它将所有传入连接(端口 22(ssh)和 1194(VPN 服务器本身)除外)重定向到连接到 VPN 的客户端。
VPN 服务器位于 vpn.example.com 客户端位于 10.8.0.2,VPN 网关位于 10.8.0.1
我该如何设置 DMZ 来执行此操作?
脚注:
我在这里找到了如何通过 VPN 重定向单个端口:使用 OpenVPN 进行端口转发
要点是运行iptables -t nat -A PREROUTING -i eth0 -d VPN_IP_HERE -p tcp --dport PORT_TO_REDIRECT -j DNAT --to-destination 10.8.0.2
但是,这只能一次对一个端口起作用,我希望有这样的解决方案--dport *
答案1
如果你关心只将 tcp 重定向到你的客户端,你可以使用:
iptables -t nat -A PREROUTING -i eth0 -d VPN_IP_HERE -p tcp --dport ! 22 -j DNAT --to-destination 10.8.0.2
这将重定向所有 TCP 数据包除了将它们重定向到端口 22 (sshd)。只要您在 udp 上运行 OpenVPN(通常情况),这应该有效。如果您还想重定向 udp,请添加:
iptables -t nat -A PREROUTING -i eth0 -d VPN_IP_HERE -p udp --dport ! 1194 -j DNAT --to-destination 10.8.0.2
然后还有 icmp:您可能也希望重定向其中的至少一部分。
与其指定要重定向的流量(在您的情况下几乎是全部流量),不如反转问题更简单:
iptables -t nat -A PREROUTING -i eth0 -d VPN_IP_HERE -p udp --dport 1194 -j RETURN
iptables -t nat -A PREROUTING -i eth0 -d VPN_IP_HERE -p tcp --dport 22 -j RETURN
iptables -t nat -A PREROUTING -i eth0 -d VPN_IP_HERE -j DNAT --to-destination 10.8.0.2
停止处理当前链的方法-j RETURN
。上面的前 2 条规则定义了“短路”重定向规则的情况。任何不符合前 2 条规则的内容都会被重定向。
一个方便的 iptables 参考:https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#RETURNTARGET
答案2
这可能已经被回答了,但你可以在 /etc/network/interfaces 中使用它
post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/8' -o eth0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/8' -o eth0 -j MASQUERADE
此规则为所有端口设置了完整的 nat,可以通过将单个 ip 设置为 10.8.0.3/32 而不是 10.0.0.0/8 来限制,以便对 eth0 上的任何端口进行 nat,这些端口必须由您的接口替换
此外,要转发特定的端口范围,您可以使用
--dport 20000:22000
在此示例中,端口 20 至 22k 将被转发