通过在同一网络中指定源地址来添加ip route

时间:2015-07-15 16:09:06

标签: linux networking routing ip forwarding

我有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回答:没有这样的设备

我不确定我是否正在走正确的道路来进行此配置。如果没有,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

我设法通过在代理上添加以下内容来解决问题:

# 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

其中pcDest ip是pc3和pc4,以防我在pc1上写规则。

更多信息:http://www.karlrupp.net/en/computer/nat_tutorial

在这里:https://serverfault.com/questions/306024/how-to-route-network-traffic-of-a-host-via-another-host