iptables 通过 OpenVPN 转发端口范围

iptables 通过 OpenVPN 转发端口范围

我在运行 OpenVPN 的公共 VPS 实例上有一个 VPN 服务器(“主机” - 10.8.1.1)。我运行的第二个实例(“客户端” - 10.8.1.2)是连接到主机 vpn 服务器的本地 ESXi 实例。两台服务器都运行 CSF(本质上是强化的 iptables 前端)。此外,两台服务器的 csf.confs 中都允许 27015:27050 UDP IN/OUT。

我尝试通过 OpenVPN 隧道将端口范围为 27015-27050 (UDP) 的主机上的流量转发到客户端。从那里,所有响应流量都必须通过隧道返回到主机(我假设通过 SNAT)。

我尝试了在 Google 上能找到的所有可能命令的所有变体,而我得到的最大结果就是初始数据包通过隧道转发到客户端,但没有返回到主机。

这是我在主机上的 csfpost.sh 中的内容(csf 启动完成后运行的脚本):

iptables -t nat -A PREROUTING -p udp -i eth0 --dport 27015 -j DNAT --to-destination 10.8.1.2:27015
iptables -A FORWARD -p udp -d 10.8.1.2 --dport 27015 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

由于我到目前为止在客户端上尝试过的命令都没有起作用,所以我怀疑它们是否有帮助。

我上面显示的命令仅影响端口 27015,但我的最终目标是转发端口范围​​ 27015-27050

谢谢任何帮助或建议!

答案1

我同意 kasperd 的观点。

如果您想确保回复数据包沿相同路由发送,您要么必须在接收盒上实现一些奇特的策略路由(使用 connmark 标记在 vpn 接口上传入的连接,然后在传出的回复数据包上使用 --restore-mark ,以及一个 ip(8) 规则,以使用默认网关为 vpn 对等体的路由表转发标记的数据包);或者只是将数据包 SNAT 到 NAT 盒的 vpn IP。

即添加类似

iptables -t nat -A POSTROUTING -p udp -o vpninterface --dport 27015 -j MASQUERADE

相关内容