问题
目前遇到一个问题,就是有一个网关上,同一个二层网络中,有两个独立的网段,其中一个网段使用DHCP方式进行管理,另一个网段可以通过手工配置IP进行访问。
那么如何在现有的Linux机器上,低成本的去验证另一个网段上的IP呢?
方案
经过考虑,可以使用Linux的network namespace来进行验证。它的原理就像从网桥中独立引出一个网线,插到另一个独立的网络环境中。具体操作如下,基于GPT3.5给出的信息并进行调整。
创建 veth pair
1 2 |
sudo ip link add veth0 type veth peer name veth1 |
连接 veth0 到 br0
1 2 3 |
sudo ip link set veth0 master br0 ifconfig veth0 up |
将 veth1 移动到新的 network namespace (ns1)
1 2 3 |
sudo ip netns add ns1 sudo ip link set veth1 netns ns1 |
GPT3.5一开始没有给出添加ns1的命令,这个是事后调整增加的
进入 ns1 network namespace
1 2 |
sudo ip netns exec ns1 bash |
在 ns1 中配置 veth1
1 2 3 4 |
ifconfig veth1 up ip addr add 192.168.210.129/28 dev veth1 ip route add default via 192.168.210.142 |
验证
接下来,在ns1中的bash中验证网络是否正常,不过存在一点点问题。就是本来希望通过curl 访问域名进行验证,发现域名解析走的是ns1中的内部监听的端口,因此无法正常访问。
所以最后采用了在/etc/hosts
文件中固定域名的IP的方法,进行了验证。
最终发现第二个网段的ping畅通,向外访问也正常走了对应的线路。
如果长期使用,还是使用完整docker会好一些,成本并不高,而且域名解析等操作也更方便。
参考
- chatGPT-3.5