我有 4 台电脑和另一台电脑,称之为代理,都在同一个网络中:172.16.96.0/20。我可以互相ping通。 但是,我想将它们分成 2 个。即:
- pc1直接连接到pc2
- pc3直接连接到pc4
但是, 从 pc1 或 pc2 到 pc3 或 pc4 的所有流量都必须通过代理,并且 从 pc3 或 pc4 到 pc1 或 pc2 的所有流量都必须通过代理
pc1 pc3
| -proxy- |
pc2 pc4
pc1 IP: 172.16.97.24
pc3 IP: 172.16.97.27
proxy IP: 172.16.97.2
要在 pc1 上执行此操作,我添加了:
ip route add 172.16.97.27 via 172.16.97.2
但是,当我执行 traceroute 172.16.97.27 时,172.16.97.2 不会显示为跃点..我不确定它是否应该..
在代理上,路由表如下所示:
default via 172.16.111.254 dev eth0
172.16.96.0/20 dev eth0 proto kernel scope link src 172.16.97.2
我想我应该添加另一个源 pc1 172.16.97.24。 为了能够将从 pc1 (172.16.97.24) 收到的流量转发到它的目的地(pc3 或 pc4),我使用了这个:
ip route add 172.16.96.0/20 via 0.0.0.0 src 172.16.97.24
错误:RTNETLINK 回答:没有这样的设备
ip route add 172.16.96.0/20 dev eth0:0 via 0.0.0.0 src 172.16.97.24
错误:RTNETLINK 回答:无效参数
和:
ip route add 172.16.96.0/20 src 172.16.97.24
错误:RTNETLINK 回答:没有这样的设备
我不确定我是否在正确的道路上进行此配置。如果没有请告诉我。谢谢!
最佳答案
我设法通过在代理上添加以下内容来解决问题:
# sysctl net.ipv4.ip_forward=1 or add net.ipv4.ip_forward=1 in /etc/sysctl.conf (to keep it after you close the terminal)
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING Append a rule to the POSTROUTING chain
-o eth0 this rule is valid for packets that leave on the eth0 network interface (-o stands for "output")
-j MASQUERADE the action that should take place is to 'masquerade' packets, i.e. replacing the sender's address by the router's address.
然后我在 pc1、pc2、pc3、pc4 上添加了:
ip route add pcDestIP via proxy
如果我在 pc1 上编写规则,pcDest ip 是 pc3 和 pc4。
更多信息:http://www.karlrupp.net/en/computer/nat_tutorial
这里:https://serverfault.com/questions/306024/how-to-route-network-traffic-of-a-host-via-another-host
关于linux - ip route add 通过在同一网络中指定源地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31435640/