使用 iptables 重写源代码

使用 iptables 重写源代码

我要将静态 IP 从 VPS 路由到我的 OpenWRT 路由器。它们通过 OpenVPN 连接 - 服务器是 10.8.0.1,路由器是 10.8.0.6。例如,我的公共 IP 是 1.1.1.1,所有流量都应流向 10.8.0.6 - 但我的路由器必须将答案发送到服务器,因为我的 OpenWRT 的默认路由是我的 adsl 调制解调器。所以我只想通过我的 VPN 路由流量,这些流量最初来自 1.1.1.1,并将答案发送到这些包。

我尝试了几种防火墙配置,主要是这样的:NAT 会重写数据包中的源 IP 吗?- 但它不起作用。使用我家用路由器上的 tcpdump,可以看到原始发送方 IP。所有流量首先流向具有两个 IP 的 VPS。这是一个 KVM 盒,我拥有完全 root 访问权限,甚至可以使用 iptables。首先,我通过 vpn 将所有流量路由到 1.1.1.1 到我的家用路由器:

iptables -t nat -A PREROUTING -d 1.1.1.1/32 -j DNAT --to-destination 10.8.0.6

到目前为止,此方法有效;从另一台服务器到 1.1.1.1 的 ping 到达了我家路由器的 tun0。但问题是,ICMP 回复通过 eth0 离开我的路由器,因此通过我的 ADSL 调制解调器,因为 ping 的发送方 (84.200.34.2XX) 不适合任何路由,因此采用默认路由。我该怎么做,让发往 10.8.0.6 的任何包的来源都重写为服务器 IP 10.8.0.1,并且服务器会将每个包发送到原始来源?

总结:

  • 流量来自 84.200.34.2XX,到达 1.1.1.1
  • 我的 VPS 将包转发到 OpenVPN(10.8.0.6)中的路由器
  • 我的路由器响应原始源 IP(84.200.34.2XX),但通过 ADSL 调制解调器的默认路由,该调制解调器具有完全不同的外部 IP

因此,我希望我的家用路由器上的所有传入流量不是来自原始源 IP,而是来自 OpenVPN 服务器 (10.8.0.1),因为 OpenWRT 有一条路由,可以通过 VPN 路由这些包的答案。我的 VPS 必须再次编辑答案包,以便源 IP 为 1.1.1.1。我无法通过 VPN 路由我的所有私人流量,因为我的 VPS 上有流量限制。

有人能解决这样的问题吗?我尝试了整个晚上(4 小时以来),但没有成功。

答案1

但是,下面的内容对我有用:

iptables -t nat -A PREROUTING -d 1.1.1.1/32 -j DNAT --to-destination 10.8.0.6
iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source 10.8.0.1

相关内容