接到个需求:给一台ubuntu虚拟机配置双网卡,其中一个是默认网卡,另一个配置路由,专门走特定ip请求,之前没配置过,踩了不少坑,记录下
1.查看可用网卡
ubuntu配置永久网关需要修改配置文件 /etc/netplan/00-installer-config.yaml
配置文件中的网卡名字可不是随便写的,要具体查看虚拟机中的网卡名称才行
ifconfig -a
从结果可以看出,只有两个网卡可以配:ens3和ens10,其他为docker创建的虚拟网卡,ens3已经配过了,那就是ens10了,又找网络部门确定了下,绑定的就是这个mac地址
ok,目标确认,在配置文件中加入ens10网络配置
2.修改配置文件
配置文件格式网上有很多,先来一段示例吧
network: version: 2 renderer: NetworkManager ethernets: eth0: #网卡名称 dhcp4: true #开启dhcp自动分配ipv4 ip dhcp6: true #开启dhcp自动分配ipv6 ip eth1: #网卡名称 dhcp4: true dhcp6: true eth2: #网卡名称 addresses: - 172.16.18.3/24 #配置ip gataway4: 172.16.18.254 #配置ipv4 网关 routes: #配置路由 - to: 10.0.100.0/24 #这里为需要访问的地址 via: 172.16.18.254 #这里为网关地址
metric: 200 #网络优先级
nameservers: #dns服务配置
addresses: []
search: []
ps 说明 metric字段默认值是100 代表默认路由,就是你服务器上网的网段,这个值不能重复,重复了就会报错,而 metric 越低,其优先级越高
172.16.18.3/24换算过来子网掩码就是 255.255.255.0,这里有个网站可以帮助换算 http://www.subnet-mask.com/
参考文档:https://blog.csdn.net/qq_42992084/article/details/129505643
https://blog.csdn.net/simplyou/article/details/131471814
我的配置文件如下
# This is the network config written by 'subiquity' network: version: 2 ethernets: ens3: addresses: [192.168.211.53/24] gateway4: 192.168.211.254 dhcp4-overrides: route-metric: 100 nameservers: addresses: - 8.8.8.8 ens10: addresses: [172.16.0.5/24] gateway4: 172.16.0.1 routes: - to: 10.214.13.0/24 via: 172.16.0.1 metric: 200 nameservers: addresses: - 8.8.8.8
3.使配置文件生效
netplan apply
这里还是建议用 netplan apply 而不是 netplan try
因为netplan try只会提示配置文件错误,而不会报具体问题
netplan try会把具体问题也抛出来
我在这个问题上卡了很久,一开始只敢用netplan try,迟迟找不到配置错误,后来用netplan apply 找到了
最后反思了下:1.配置错误,netplan apply 不会生效,不用担心配置错误造成网络连不上
2.配置文件中始终包含ens3网关的配置,就算我加的网关报错,应该不会影响原有ens3网关
4.检查路由
ip r
参考文档:https://linuxhint.com/set-default-gateway-ubuntu/
5.网络路由优先级问题
问题:
重启服务器之后,访问之前的域名怎么也连不上
域名配置,nginx配置啥也没改啊
后来经过排查可能为双网卡造成的
于是果断注释掉新网卡配置,还原成单网卡,重启服务器,之后恢复正常
原因:
初步判断问题原因为配置双网卡,但是默认路由没配置对,造成了系统重启无法路由到域名映射的ip地址上
解决方法:
方法一:去掉不需要映射的网卡配置的网关
这方法比较取巧,就是去掉新配置网卡的网关,让系统只有一个网关,这样所有请求都会走这个默认网关,就肯定会找到这个ip
经过修改后的配置文件如下
# This is the network config written by 'subiquity' network: version: 2 ethernets: ens3: addresses: [192.168.211.53/24] gateway4: 192.168.211.254 dhcp4-overrides: route-metric: 100 nameservers: addresses: - 8.8.8.8 ens10: addresses: [172.16.0.5/24] routes: - to: 10.214.13.0/24 via: 172.16.0.1 metric: 200 nameservers: addresses: - 8.8.8.8
修改后,重启系统(重启网络服务也可以),一切正常
方法二:调整路由顺序
我不甘心那样,所以开始搜索ubuntu route排序,找到了如下几个
https://www.cnblogs.com/hls-code/p/16982525.html
https://blog.csdn.net/weixin_44129085/article/details/109121911
https://blog.csdn.net/weixin_44444810/article/details/124768090
https://blog.csdn.net/lm_is_dc/article/details/132086321
配置还原之后开始进行如下操作
1.查看路由顺序
route -n
可以看到新加的网关排序最高
2.调整路由顺序
apt install ifmetric #把ens10网卡优先级调成100,数字越低优先级越高 ifmetric ens10 100 route -n
这里可以看到之前200的优先级也变为100了,由此可见,上面的配置文件metric: 200只对路由配置有效,对网关配置无效
测试链接域名,一切正常
本以为找到答案的时候,重启系统之后,发现一切还原了!ifmetric虽然有效,但是并不是永久生效
看来还得琢磨 /etc/netplan/00-installer-config.yaml 配置文件
我原来以为 route-metric: 100 参数是可以用的
实际上,并没有作用,后来看到了这篇范例:https://github.com/canonical/netplan/blob/main/examples/route_metric.yaml
才意识到,这参数应该是控制dhcp优先级的,我这是静态ip,并没有用
参考文档:https://zhuanlan.zhihu.com/p/602560844?utm_id=0
于是我着重搜索 gateway4 排序
就在我一筹莫展时,搜索gateway4的优先级时看到这个:https://blog.csdn.net/yilovexing/article/details/126424086
WARNING:gateway4 has been deprecated, use default routes instead
我意识到了gateway4已经过时了,换一种思路,用路由来做优先级是不是更佳的方式?
结合之前网关的路由配置,我修改了00-installer-config.yaml配置文件
# This is the network config written by 'subiquity' network: version: 2 ethernets: ens3: addresses: [192.168.211.53/24] # gateway4: 192.168.211.254 routes: - to: 0.0.0.0/0 via: 192.168.211.254 metric: 100 nameservers: addresses: - 8.8.8.8 ens10: addresses: [172.16.0.5/24] routes: - to: 10.214.13.0/24 via: 172.16.0.1 metric: 200 nameservers: addresses: - 8.8.8.8
netpan apply之后和之前一样,网页访问正常