Linux双网卡网络配置问题

问题描述1 :其中一个网口插入网线后不起作用。

解决方案1:未配置两个网卡的信息,以ubuntu为例,打开/etc/netplan/50-cloud-init.yaml文件,加入两个网卡的配置信息即可:

bash 复制代码
network:
  version: 2
  ethernets:
    enp1s0:  # 外网口,DHCP 自动获取
      dhcp4: true
    enp2s0:  # 内网口,DHCP 自动获取
      dhcp4: true

问题描述2 :接入项目网络后,网口1可以正常连接外网,但是网口2无法访问局域其他IP

解决方案2

局域网未开启DHCP自动分配IP,需手动设置IP地址。

首先,第一次我的配置信息如下(有问题):

bash 复制代码
network:
  version: 2
  ethernets:
    enp1s0:  # 外网口,DHCP 自动获取
      dhcp4: true
    enp2s0:  # 内网口,DHCP 自动获取
      dhcp4: true
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

结果设置完后,网口一上不了外网,远程不了了。

分析原因,是因为在较新的 Linux 发行版(如 Ubuntu 22.04 及以上)中,Netplan 已经不再推荐使用 gateway4 字段,而是要求使用 routes 来配置默认网关。并且还存在几个问题:

  1. 网口2设定了静态ip,dhcp4应为false
  2. 明明只改坏了网口2,为什么网口1(外网)也跟着一起"罢工"了?这其实是因为 Netplan 的"全有或全无"机制 以及 Linux 路由表的"唯一性"原则在背后捣鬼。
  3. 路由表被覆盖或冲突

针对问题2

Netplan 的工作逻辑是:读取 /etc/netplan/ 目录下的所有 .yaml 配置文件,把它们作为一个整体来生成底层的网络配置。当执行 netplan apply 时,只要这个 YAML 文件里有任何一个语法错误(比如写了不兼容的 gateway4),Netplan 就会直接报错并拒绝应用整个文件。

++也就是说,虽然只写错了网口2的配置,但因为它们在同一个配置文件里,导致网口1的配置也没有被成功加载。网口1自然就断网了。++

但是有一点是比预期好一些,虽然网口1无法上外网,但是两个网口连接局域网是没问题的,这样在局域网内仍然可以远程,不然针对服务器还要找个显示器和键盘这些,就更麻烦了。

针对问题3

++Linux 系统在同一时间只允许存在一条有效的默认路由。++

如果网口1之前是通过 DHCP 自动获取的网关,或者系统里原本有一条正确的默认路由,网口2的 gateway4 会直接把它覆盖掉,或者导致两条默认路由打架(Metric 值冲突)。

结果就是:外网的数据包明明是从网口1进来的,但系统查路由表时,发现默认出口被指向了网口2。于是,回包被错误地从网口2扔了出去,外网根本收不到,网口1自然就"死"了。

最终正确配置如下

bash 复制代码
network:
    version: 2
    ethernets:
        enp1s0:  # 外网口 (192.168.2.x)
            dhcp4: true
            dhcp4-overrides:
                route-metric: 100  # 【关键】设置优先级为100(数字越小越优先)
        enp2s0:  # 内网口 (192.168.1.x)
            dhcp4: false           # 【必须关闭】防止自动获取网关
            addresses:
                - 192.168.1.100/24
            routes:
                - to: 192.168.1.0/24  # 【修正点】这里只能写内网网段,绝对不能写 default
                  via: 192.168.1.1    # 告诉电脑:只有访问192.168.1.x才走这个口
            nameservers:
                addresses: [114.114.114.114, 8.8.8.8]

最后,再提醒一点,修改完配置一定要执行:

bash 复制代码
sudo netplan apply

不然,你本来改正确了,但是没有应用配置,导致配置无效,你还以为配置仍然有问题。