将端口从一个vps转发到另一个vps

将端口从一个vps转发到另一个vps

我在 vps1 上创建了一个 VPN 服务器(Shadowsocks、Openvpn、Wiregaurd 等)。我想连接 vps2,它会将我重定向到 vps1。如果可能的话,我想将所有端口从 vps2 转发到 vps1。

客户端 -> vps2 -> vps1 (VPN)

我需要尽快重定向。

答案1

我通过几种不同的方式完成了你想做的事情。更简单的方法是使用以下规则(适用于 2 个端口,但你可以根据需要进行调整)-

VPS2 上所需的命令是:

 iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 60.234.77.235
 iptables -t nat -A POSTROUTING -p tcp --dport 443 -j MASQUERADE

上述方法有效,不需要对 VPS1 进行任何更改,但缺点是所有流量在 VPS1 上都显示为来自 VPS2(即 VPS1 无法看到 IP 数据包中的真实源地址)

您还需要打开 net.ip4.ip_forward=1(在 /etc/sysctl.conf 中并重新加载)。我的配置也有 net.ipv4.conf.default.rp_filter=1 和 net.ipv4.conf.all.rp_filter=1,但我认为这些对于仅使用 iptables 的解决方案来说不是必需的。

我通过删除第二条 IPTABLES 规则并在 Wireguard VPN 上实施基于策略的路由来纠正此问题,这样,如果连接的目标 IP 是 wireguard 接口,它将被路由回 wireguard 隧道,而直接到机器的流量不会通过隧道。设置策略路由要困难得多。

由于您在评论中添加的规则与我使用的规则类似,因此下一步是在每个盒子上启动 tcpdump,查看每个盒子的接口上进出哪些流量,以缩小问题的范围。 一种明显的可能性是您的 VPS2 不允许转发数据包。您可以使用以下方法解决此问题

 iptables -I FORWARD -j ACCEPT  

(或者一些更严格的变体)。您可能还想暂时添加类似上述的 INPUT 规则,以排除这种可能性。

相关内容