![使用配置文件而不是 ip 命令向虚拟接口添加静态路由](https://linux22.com/image/617129/%E4%BD%BF%E7%94%A8%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E6%98%AF%20ip%20%E5%91%BD%E4%BB%A4%E5%90%91%E8%99%9A%E6%8B%9F%E6%8E%A5%E5%8F%A3%E6%B7%BB%E5%8A%A0%E9%9D%99%E6%80%81%E8%B7%AF%E7%94%B1.png)
我们使用 /etc/sysconfig/network-scripts/route-ethx 文件静态分配路由。这使得管理它们相当容易,因为我们在 kickstart 过程中添加了路由(通过后脚本)。它们很少更改,如果需要更新,我们只需推送更改并更新构建脚本以包含新路由。
最近,一位客户要求我们提供一个具有唯一 IP 的虚拟接口 (eth0:0)。它需要专门连接到一个网络。eth0 上分配的第一个 IP 将处理所有其他流量。
我所看到的所有内容都说明了如何使用 添加路由ip route add
,但是我无法弄清楚如何指定任何到特定 IP 或网络的内容都可以设置源 IP。如果我使用 ip 命令,它会更新路由文件还是将其存储在其他地方以便在重新启动后持久保存?如果我必须将条目添加到 eth0:0 的路由文件中,该行应该是什么样子?
基本上来说:
如果要发送到 10.0.0.2,则使用 IP 10.0.1.3 作为源。如果要发送到其他任何地方,则使用 IP 10.0.1.2 作为源。
这可能吗?我该如何实现它?
答案1
如果我清楚地理解了你的问题,你可以尝试以下方法
# ip route add 10.0.0.2 via xxx.xxx.xxx.xxx src 10.0.1.3
# ip route add default via yyy.yyy.yyy.yyy src 10.0.2.2
我还需要研究其他方法吗?
您可以尝试使用 iptables
# iptables -t nat -I PREROUTING -d 10.0.0.2 -j SNAT --to-source 10.0.1.3
答案2
一位最近做过同样事情的同事澄清了这一点。
要输入到 route-eth0:0 文件中的一条路由的格式为:
10.0.0.2/32 via 10.0.1.1 dev eth0:0 src 10.0.1.3
默认情况下,通过 eth0 的所有其他流量都将被标记为来自 10.0.1.2。10.0.1.1 是默认路由,但数据包将具有正确标记的源 IP。