有一些方法可以实现在多 nic 的 linux 机器上指定某程序使用某 nic,而不是依照 routing table。其中一种方法是使用 LD_PRELOAD 技巧,通过修改程序的网络绑定来实现¹。 另一种方法是使用网络命名空间(network namespaces)的特性,通过 ip 命令来创建和管理不同的网络环境¹²。來源:
- Bind unix program to specific network interface
- linux - Configure a process to use specific NIC - Unix & Linux Stack Exchange.
- How To Use Network "Metric" to Manage Two NICS in one PC?.
然後,name space 的方法:
如何使用网络命名空间来指定程序使用 eth1。可以按照以下步骤操作: - 创建一个网络命名空间,比如叫 ns1:`ip netns add ns1` - 将 eth1 接口移动到 ns1 命名空间中:`ip link set eth1 netns ns1` - 在 ns1 命名空间中配置 eth1 的 IP 地址和路由:`ip netns exec ns1 ifconfig eth1 192.168.0.10/24 up` 和 `ip netns exec ns1 ip route add default via 192.168.0.1` - 在 ns1 命名空间中运行您想要指定的程序,比如 ping:`ip netns exec ns1 ping 8.8.8.8` 这样,您就可以让 ping 程序使用 eth1 而不是默认的网络接口了。 (1) Network Namespaces — PF_RING dev documentation. https://www.ntop.org/guides/pf_ring/containers/namespaces.html (2) How does `ip netns exec` command create mount namespace?. https://stackoverflow.com/questions/45629002/how-does-ip-netns-exec-command-create-mount-namespace (3) Network Emulation using Network Namespaces and Mininet. https://www.inf.usi.ch/faculty/carzaniga/edu/adv-ntw/mininet.pdf
然後,用 LD_PRELOAD 的方法:
使用网络命名空间来指定程序使用 eth1。可以按照以下步骤操作: - 创建一个网络命名空间,比如叫 ns1:`ip netns add ns1` - 将 eth1 接口移动到 ns1 命名空间中:`ip link set eth1 netns ns1` - 在 ns1 命名空间中配置 eth1 的 IP 地址和路由:`ip netns exec ns1 ifconfig eth1 192.168.0.10/24 up` 和 `ip netns exec ns1 ip route add default via 192.168.0.1` - 在 ns1 命名空间中运行您想要指定的程序,比如 ping:`ip netns exec ns1 ping 8.8.8.8` 这样就可以让 ping 程序使用 eth1 而不是默认的网络接口了。 (1) Network Namespaces — PF_RING dev documentation. https://www.ntop.org/guides/pf_ring/containers/namespaces.html (2) How does `ip netns exec` command create mount namespace?. https://stackoverflow.com/questions/45629002/how-does-ip-netns-exec-command-create-mount-namespace (3) Network Emulation using Network Namespaces and Mininet. https://www.inf.usi.ch/faculty/carzaniga/edu/adv-ntw/mininet.pdf
沒有留言:
張貼留言