linux - ip route add 通过在同一网络中指定源地址

标签 linux networking routes 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 回答:没有这样的设备

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

最佳答案

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

# 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/

相关文章:

Linux 管道查看器,如何拆分管道

php - 如何将请求路由到文档根目录外的 codeigniter 项目

java - 使用 Java 1.5 在 Windows 中获取以太网适配器的 IPv4 地址

node.js - 如何在快速路由中指定可选参数名称?

php - 强制 Joomla JRoute 使用菜单项

linux - 如何使用新的环境变量打开 gnome-terminal?

python - 自动添加客户端到nagios server

java - 通过数据报/多播向客户端通知列表

java - C/C++ 中的跨平台兼容性(从 Java 移植项目)?

laravel - 如何修复 Laravel request/routes/urls - 它认为 url 是 http,而实际上是 https