学习笔记
Git
  • C#
  • F#
  • AspNetCore
  • EF Core
  • WPF
  • Tauri
  • IoTDB
  • Redis
  • Docker
  • Kubernetes
  • RabbitMQ
  • 日志

    • NLog的配置文件
Linux
基础设施
  • Vue

    • Vue基础
VS Code的插件与玩法
Rust
Python
  • Maven
  • Spring Boot
实际项目
我的博客
Git
  • C#
  • F#
  • AspNetCore
  • EF Core
  • WPF
  • Tauri
  • IoTDB
  • Redis
  • Docker
  • Kubernetes
  • RabbitMQ
  • 日志

    • NLog的配置文件
Linux
基础设施
  • Vue

    • Vue基础
VS Code的插件与玩法
Rust
Python
  • Maven
  • Spring Boot
实际项目
我的博客
  • Debian12初始化
  • 双网卡配置主副网卡
  • Rsync同步文件

nmcli双网卡配置主副网卡

先说说情况,公司有一台物理服务器,其中虚拟化了多个Linux系统,这些Linux系统各有用途。对外提供着不同的服务,同时内部之间也需要相互连通,因此这些虚拟机都同时处在两个局域网中:一个连接到公司的局域网中,用于连接外网;一个连接到由主机创建的虚拟路由器,提供内部Linux虚拟机之间互相访问的高速通道。非常典型的内、外网双网卡结构。

简单谈谈nmcli

在CentOS 8(准确的说是RHEL8及其衍生版),默认已经推荐使用nmcli这个工具来管理网络了,以前的修改script的方式已经快要淘汰了,系统中也找不到对应的script文件了,因此本文的配置网络,都是通过nmcli来进行管理的

nmcli connection show

nmcli connnection

nmcli c

上面的三条命令是等效的,第一条为完整的命令,第二条命令是因为connection的默认操作就是show,因此可以省略后面的show,第三条命令是因为nmcli查找命令的时候并不需要输入完整的命令,而是只要输入的命令可以确定到唯一对象就行了,因此可以用c直接代替connection

nmcli能够管理连接,也就是本文中的connection,除了connection对象,还有device对象,管理设备,用的最多的就是这两个对象,当然还有其他对象,但是这里就只是简单的讲一下connection对象中的关于默认路由的配置和自动连接网络,因为我主要做开发,Linux只能算半罐水,目前遇到的网络问题也就这两个,如果后面遇到新的了,到时候再更新

查看网络配置

前面提到了nmcli connection show可以查看系统中的网络连接基本信息,如果要看对应的详细信息,则在show的后面跟对应的连接名即可,也就是这条命令

nmcli connection show eth1

nmcli c show eth1

这条命令就是查看对应的连接eth1的详情,下面的是将connection简写为c的版本,需要注意的是,因为带了参数,此时的show讲不能再省略

通过这条命令,就可以看到连接的详细信息

connection.id:                          eth1
connection.uuid:                        a073ba38-4fe1-4edc-b0c8-0e7bae0375d1
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              eth1
connection.autoconnect:                 是
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0(default)
connection.auth-retries:                -1
connection.timestamp:                   1662868627
connection.read-only:                   否
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1(default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     未知
connection.lldp:                        default
connection.mdns:                        -1(default)
connection.llmnr:                       -1(default)
connection.dns-over-tls:                -1(default)
connection.wait-device-timeout:         -1
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          否
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:   --
802-3-ethernet.mtu:                     自动
802-3-ethernet.s390-subchannels:        --
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            --
802-3-ethernet.wake-on-lan:             default
802-3-ethernet.wake-on-lan-password:    --
802-3-ethernet.accept-all-mac-addresses:-1(default)
ipv4.method:                            manual
ipv4.dns:                               --
ipv4.dns-search:                        --
ipv4.dns-options:                       --
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.12.202/24
ipv4.gateway:                           --
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.routing-rules:                     --
ipv4.ignore-auto-routes:                否
ipv4.ignore-auto-dns:                   否
ipv4.dhcp-client-id:                    --
ipv4.dhcp-iaid:                         --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                是
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.dhcp-hostname-flags:               0x0(none)
ipv4.never-default:                     是
ipv4.may-fail:                          是
ipv4.required-timeout:                  -1 (default)
ipv4.dad-timeout:                       -1 (default)
ipv4.dhcp-vendor-class-identifier:      --
ipv4.dhcp-reject-servers:               --
ipv6.method:                            auto
ipv6.dns:                               --
ipv6.dns-search:                        --
ipv6.dns-options:                       --
ipv6.dns-priority:                      0
ipv6.addresses:                         --
ipv6.gateway:                           --
ipv6.routes:                            --
ipv6.route-metric:                      -1
ipv6.route-table:                       0 (unspec)
ipv6.routing-rules:                     --
ipv6.ignore-auto-routes:                否
ipv6.ignore-auto-dns:                   否
ipv6.never-default:                     否
ipv6.may-fail:                          是
ipv6.required-timeout:                  -1 (default)
ipv6.ip6-privacy:                       -1(unknown)
ipv6.addr-gen-mode:                     stable-privacy
ipv6.ra-timeout:                        0 (default)
ipv6.dhcp-duid:                         --
ipv6.dhcp-iaid:                         --
ipv6.dhcp-timeout:                      0 (default)
ipv6.dhcp-send-hostname:                是
ipv6.dhcp-hostname:                     --
ipv6.dhcp-hostname-flags:               0x0(none)
ipv6.token:                             --
proxy.method:                           none
proxy.browser-only:                     否
proxy.pac-url:                          --
proxy.pac-script:                       --
GENERAL.NAME:                           eth1
GENERAL.UUID:                           a073ba38-4fe1-4edc-b0c8-0e7bae0375d1
GENERAL.DEVICES:                        eth1
GENERAL.IP-IFACE:                       eth1
GENERAL.STATE:                          已激活
GENERAL.DEFAULT:                        是
GENERAL.DEFAULT6:                       否
GENERAL.SPEC-OBJECT:                    --
GENERAL.VPN:                            否
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveC>
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Setting>
GENERAL.ZONE:                           --
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         192.168.12.202/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.12.0/24, nh = 0.0.0.0, mt>
IP6.ADDRESS[1]:                         fe80::d9f:c18d:165f:167f/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 1024

启用网卡自动连接

前面说到了show加连接名可以看到网络的详细配置,如果要启用自动连接,只需要将connection.autoconnect设置为是(或者是true,显示跟系统语言有关系),我这里因为已经配过了,因此已经显示为是了。下面是配置语句

nmcli c modify eth1 connection.autoconnect true

查看使用的是show操作,而修改则是modify操作,后面跟修改的连接名,再跟需要修改的属性,再跟要修改的值。通过这条命令,就是讲eth1这个连接的自动连接设置为true,也就是会自动进行连接

配置默认路由,默认使用连接外网的网卡

当使用双网卡打开了两个连接,两个连接默认都会设置默认路由,这时候通过route命令,会有两条default的路由,在通过域名进行访问的时候,有时候就会走内网的default路由,这时候就表现为不能上网,这时候与两种选择,一是搞一个软路由,让内网的流量继续向外走到外网;一是删除内网的默认路由。我们选择的是删除内网的默认路由,因为确实没必要再搞个软路由转一圈。

删除内网的默认路由可以直接在路由表上删除,也就是route命令去删除,但是这种方式在连接下次建立之后,又会重新建立,因此根本上的解决办法,还是禁止自动创建default路由

控制这是否创建default路由的是ipv4.never-default属性,如果是ipv6则是ipv6前缀,这个属性默认是false,也就是每次都会创建default路由,因此需要将对应的属性值改为true,下面是对应的命令

nmcli c modify eth1 ipv4.never-default true

never-default设置为true,永不创建default路由,这样就只有外网的连接有default路由,这样内部的访问除了通过对应的内网ip网段直接访问的,其他的都会走外网路由,双网卡的网络也就正常了

Last Updated:
Contributors: 吴俊城
Prev
Debian12初始化
Next
Rsync同步文件