我值得信赖的 Slackware 盒子坏了,我不得不用已经构建的 Linux Mint v18 替换它。我原本希望这将是一个直接替代品,但是这些年来 iproute2 的路由已经发生了变化。我希望只添加“route add default gw 192.168.1.1 eth1”就能工作 - 确实如此 - 但问题是我的网关计算机无法与 eth0 上的任何内容建立连接。
简化布局:
|192.168.0.0/24|---|网关|---|192.168.1.0/24| | ---|路由器 192.168.1.1|---|互联网|
网关有 eth0 和 eth1,并且是 192.168.0.0/24 上所有内容的防火墙。路由器通常处理 192.168.1.0/24 上的 WiFi 设备。
当前配置,我让 KDE 网络管理器调出接口,然后添加了 gw 命令,如上所述:
# 路由-n 内核IP路由表 目标网关 Genmask 标记度量参考使用 Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth1 192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
这是有效的; 192.168.0.0/24 上的所有设备均已正确路由,我可以毫无问题地从 192.168.1.0/24 连接到网关和互联网。
但是,我无法从网关发起 ping 到 192.168.0.0/24 上的任何内容。我运行tcpdump,发现源IP已更改为192.168.1.2(eth1)。因此,这告诉我数据包从错误的接口发出,即使我将网关线路的指标设置为高于其他线路,因此不首先考虑。
我读过很多 stackexchange 帖子,以及一些网站,例如策略路由, 和linux-ip,但我似乎找不到解决方案。
我对 iproute2 不太熟悉,但为了让 192.168.0.0/24 正常工作,我所能够做到的就是:
echo "1 admin" >> /etc/iproute2/rt_tables ip 规则从 192.168.0.0/24 添加优先级 1 表管理 ip规则添加到192.168.0.0/24优先级1表管理 ip 路由添加 192.168.0.0/24 表 admin dev eth0 ip 路由缓存刷新
这对我来说是有道理的;创建一个比默认优先级更高的表,创建一个从/到的规则,然后在同一个表上添加一条路由以通过 eth0 发送它。但是,这不起作用。
好像有什么东西我失踪了,但我找不到它。
# uname -a Linux neXuss2 3.13.0-37-generic #64-Ubuntu SMP 周一 9 月 22 日 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
答案1
您不应该需要iproute2
这样一个简单的案例。
但是,您应该检查 IP 路由的主交换机是否已打开:确保您的/etc/sysctl.conf
包括线路
net.ipv4.ip_forward=1
然后运行sudo sysctl -p
使其立即生效。
sysctl的默认值为net.ipv4.ip_forward
0,这会完全禁用所有 IPv4 路由功能。
另外,您应该检查基础知识:验证 eth0 接口是否确实有链接并且不会产生错误。ethtool eth0
验证链接状态并ethtool -S eth0
查看 NIC 驱动程序中的统计计数器。