我有一台 IP 为 192.168.3.1 的 ubuntu 机器,另一台机器以固定 IP 192.168.3.2 连接到它,这台机器还通过 USB0 连接到路由器,该路由器已将 IP 172.30.220.17 共享给该机器
我想要做的是将本机通过 192.168.3.1 IP 收到的任何 TCP 或 UDP 数据包从路由器转发到 172.30.220.19,反之亦然
例如,如果位于 192.168.3.2 的计算机在端口 33000 上向主计算机发送“Hello”TCP 数据包,则它应该将该数据包发送到 172.30.220.19:33000
在阅读了 iptables 文档和之前的几个问题后,我尝试了下面的 NAT 命令,但它不起作用,我不知道为什么。如果有人能指导我我做错了什么,我会很高兴。谢谢你的时间
sudo iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination 172.30.220.19
sudo iptables -t nat -A POSTROUTING -p tcp -d 172.30.220.19 -j SNAT --to-source 192.168.3.2
您所描述的内容听起来像是您正在设置网络网关/路由器。这就是您需要执行的操作。
在示例中,public_nic是 IP 地址为 172.30.220.17 的网卡名称,gateway_nic是 IP 地址为 192.168.3.1 的网卡。我假设这两个网卡都在同一台机器上。
1) 启用IP转发
您必须确保启用 IP 转发。
要暂时启用,您可以运行此命令
要永久启用,您可以编辑 /etc/sysctl.conf 并添加以下行
然后运行此命令以应用更改。(仅当您选择修改 sysctl 配置文件时才需要)
2) 设置伪装
这将使所有数据包看起来像是来自公共 IP,或者在本例中是来自您的 172.30.220.19 地址,而不是原始主机的私有 IP。
3) 设置转发规则
4)配置路由
您需要确保内部网络上要转发的设备 (192.168.3.2) 使用 ${gateway_nic} IP 作为默认网关。在你的情况下是192.168.3.1。
这个脚本最终让它为我的场景工作。usb0 是 172.30.220.17 子网的接口名称,end0 是主机上 192.168.3.1 子网的接口名称