前段时间工作中遇到个不是很常见的网络需求,具体事件描述:公司在一个客户那里有一台服务器(4块网卡),还有一台工控机,需求是服务器的网卡1配置DHCP连接公网,网卡2与工控机通过一台交换机连接进行通讯,两个网卡在同一网段内(192.168.1.0/24),这就造成了网卡2配置了192.168.1.*/24的IP后 与 工控机都插在交换机上但是无法正常通信,即ping不通对方的情况,后来在网上找了一些帖子,一般都写的配置和解决办法非常模糊,而且一度造成很大的误导,通过实际的环境测试很简单就解决这种场景需求的问题。
对服务器的网络进行配置,我这里的服务器操作系统是Ubuntu22.0.4
#vim /etc/netplan/00-installer-config.yaml
network:
ethernets:
eth0:
dhcp4: true
eth1:
dhcp4: false
addresses:
- 192.168.1.10/32
routes:
- to: 192.168.1.20/32
metric: 200
version: 2
* 这里192.168.1.10是服务器网卡2的配置,192.168.1.20是工控机的IP地址,必须要加routes:配置否则到工控机的IP不通
看一下网卡情况
#ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:22:27:98:5d txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.66 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fd42:8aa9:468b:6600:20c:29ff:fea8:f0f5 prefixlen 64 scopeid 0x0<global>
inet6 fe80::20c:29ff:fea8:f0f5 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a8:f0:f5 txqueuelen 1000 (Ethernet)
RX packets 865275 bytes 112848170 (112.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 688546 bytes 41640941 (41.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.20 netmask 255.255.255.255 broadcast 0.0.0.0
inet6 fe80::20c:29ff:fea8:f0ff prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a8:f0:ff txqueuelen 1000 (Ethernet)
RX packets 1688 bytes 179216 (179.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1004 bytes 95855 (95.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
再看一下路由表:
#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.20 0.0.0.0 255.255.255.255 UH 200 0 0 eth1
*由于服务器中安装了docker所以有docker0的网络适配器,这里的eth0是服务器的第一块网卡,eth1是服务器的第二块网卡。
测试连通性:
#ping 192.168.1.20
PING 192.168.1.20 (192.168.1.20) 56(84) bytes of data.
64 bytes from 192.168.1.20: icmp_seq=1 ttl=64 time=2.91 ms
64 bytes from 192.168.1.20: icmp_seq=2 ttl=64 time=1.79 ms
64 bytes from 192.168.1.20: icmp_seq=3 ttl=64 time=1.47 ms
64 bytes from 192.168.1.20: icmp_seq=4 ttl=64 time=1.57 ms
#ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.91 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.79 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=1.47 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=1.57 ms
可以看到上面的测试结果,已经达到了预期的需求。
总结:这里主要是两方面的配置,一个是默认的eth0网卡需要走192.168.1.1的路由与其他设备互联,而eth1网卡只与工控机的192.168.1.20互联,只需要在配置eth1网卡时将掩码位改为/32就可以解决这个问题,这类需求不需要网络上那些帖子中写的route add -net 增加各种路由即可完美解决。由于个人能力有限,上面的内容存在很多不严谨或错误,进提供给大家参考,希望能对大家有所帮助,对你的帮助也是我分享的动力。