💭 前言

你是否会遇到在不同的 Linux 系统中配置网络时,修改的配置文件和语法都不一样的烦恼呢?🙍🙍🙍

各种不同的文件路径和语法,甚至 Ubuntu 系统中每隔几代网络配置文件就会变换位置和语法,这种情况非常不利于我们日常对系统的维护和管理。

对于这种情况,我们可以使用 NetworkManager 工具在不同的系统上进行统一语法的配置与管理。🍃🍃🍃

现阶段所发行的 Linux 版本基本都支持 NetworkManager 工具进行统一管理。

如果配置时发生语法错误,该工具将会暂停修改该网络,不会造成配置文件错误而导致的一系列问题。⚠️⚠️⚠️

甚至当你将原网络配置文件删除后,只要使用命令创建一个和原先参数一样的网络接口,该配置文件就会自动的重新生成。

当系统原生安装了 network-manager 使用命令做完配置后,网络配置保存在/etc/NetworkManager/system-connections/目录下,而原生不支持,是后续安装的情况下(比如 ubuntu server 使用 netplan)会生成对应网络服务的配置文件保存在该服务目录下。🧐🧐🧐

PS:network-manager 接管网络后使用 nmcli 命令修改网卡的相关配置后会永久生效(重启网卡后依旧生效)。

一、配置 NetworkManager 接管网络(选)

如果系统默认自带了 NetworkManager 工具就不用做此步,如果是后期手动安装的就需要配置接管网络

安装 Network-Manager 并启动

apt install network-manager -y
systemctl restart NetworkManager
systemctl enable NetworkManager

配置 NetworkManager 接管网络

语法:

nmcli net <on/off>

示例:

nmcli net on

netplan 管理网络的系统

如果是 netplan 管理网络的系统(如 ubuntu22.04)需要在 netplan 中指定 NetworkManager 接管网络:

vim /etc/netplan/00-installer-config.yaml                # 每个系统的文件名都不一样,我这里叫00-installer-config.yaml
# 在version下添加,注意开头对齐:
renderer: NetworkManager
保存退出

0

使配置应用到系统中

netplan apply

ifupdown 管理网络的系统

如果是 ifupdown 管理网络的系统(如 eve-ng 或 Ubuntu18.04)需要:

1、在 NetworkManager 配置中指定 ifupdown 也可管理网络,这样如果系统原先存在有网络连接,在 NetworkManager 接管后原网络连接依旧存在不改变:

vim /etc/NetworkManager/NetworkManager.conf
修改以下内容:
managed=true
保存退出

0

2、创建.yaml 文件并修改(如果原先存在有后缀为.yaml 的文件,直接修改即可,没有的话再创建)

vim /etc/netplan/interface.yaml
添加以下内容:
network:
    version: 2
    renderer: NetworkManager
保存退出

3、暂时关闭系统网络服务后使得 netplan 配置在系统生效并重启 NetworkManager 服务

systemctl stop systemd-networkd
netplan apply
systemctl restart NetworkManager
systemctl restart systemd-networkd

此时已经可以通过 nmcli ​管理网络了

使用 nmcli -p device ​查看设备状态

nmcli -p device
============
  设备状态
============
DEVICE  TYPE      STATE   CONNECTION 
--------------------------------------------------
ens32   ethernet  已连接  有线连接 1 
lo      loopback  未托管  --         

二、nmcli 的相关配置(后置参数均可缩写)

有线网络配置

使用 nmcli 添加一个网卡并配置静态 ip 地址

语法:

nmcli con add con-name <连接名> ifname <网卡名> type <连接类型> ipv4.method manual ipv4.address <ipv4地址> ipv4.gateway <ipv4网关地址> ipv4.dns <ipv4 dns服务器>

注意: ​如果想要添加两个 dns 地址应该用双引号" "将两个地址包起来,表示两个地址都是 DNS 地址

示例:

nmcli con add con-name test ifname ens32 type ethernet ipv4.method manual ipv4.addresses 192.168.10.10/24 ipv4.gateway 192.168.10.2 ipv4.dns 192.168.10.2
 连接 "test" (3ceeec8a-d92c-42dd-ae10-2f5478eda991) 已成功添加

此时静态地址就配置完成了,如果不进行指定则 NetworkManager 默认会在接口创建的时候自动开启该接口,当然我们也可以指定某个接口的打开和关闭状态

激活/关闭网卡

语法:

nmcli con {up/down} <连接名>

示例:

nmcli con up test  连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)

查看网卡信息

nmcli con show
NAME        UUID                                  TYPE      DEVICE 
test        3ceeec8a-d92c-42dd-ae10-2f5478eda991  ethernet  ens32  
有线连接 1   b640bf63-ac94-3547-be75-8fac06083304  ethernet  --    

0

使用 nmcli 修改一个网卡的地址

语法:

nmcli con modify <连接名> ipv4.method manual ipv4.addresses <新的ipv4地址> ipv4.gateway <新的ipv4网关地址> ipv4.dns <dns服务器>

示例:

nmcli con modify ens33 ipv4.method manual ipv4.addresses 192.168.10.20/24 ipv4.gateway 192.168.10.2 ipv4.dns 192.168.10.2

刷新网卡并查看信息

nmcli con up test
ip add

0

使用 nmcli 添加一个网卡配置使其获取动态 ip 地址

语法:

nmcli con add con-name <连接名> ifname <网卡名> type <连接类型> ipv4.method auto

示例:

nmcli con add con-name test ifname ens32 type ethernet ipv4.method auto
nmcli con up test						# 激活网卡

使用 nmcli 将已有的静态网卡配置修改为动态网卡配置

语法:

nmcli con modify <连接名> ipv4.method auto

示例:

nmcli con modify test ipv4.method auto
nmcli con up test

然后需要将静态地址删除,否则使用 ip add 查看时会有两个地址出现

nmcli connection modify test ipv4.addresses "" ipv4.gateway ""  ipv4.dns ""       	# 将test的静态地址设置为空,也就不存在了,只剩下了动态地址

PS:需要先获取到 dhcp 地址才能删除原静态配置,否则会提示"ipv4.method=manual 不允许这个属性为空"

当然,如果觉得麻烦,也可以将原静态连接删除后直接添加新的动态地址配置,如下:

nmcli con del test
nmcli con add con-name test ifname ens32 type ethernet ipv4.method auto

使用 nmcli 将已有的动态网卡配置修改为静态网卡配置

语法:

nmcli con modify <连接名> ipv4.method manual ipv4.address <IP地址/子网掩码> ipv4.gateway <网关> ipv4.dns <dns地址>

示例:

nmcli con modify test ipv4.method manual ipv4.address 192.168.10.20/24 ipv4.gateway 192.168.10.2 ipv4.dns 192.168.10.2
nmcli con up test

使用 nmcli 删除一个网卡配置信息

语法:

nmcli con del <连接名> 

示例:

nmcli con del test
 成功删除连接 "test" (3ceeec8a-d92c-42dd-ae10-2f5478eda991)

查看网卡信息

nmcli con show
NAME        UUID                                  TYPE      DEVICE 
有线连接 1  b640bf63-ac94-3547-be75-8fac06083304  ethernet  ens32 

使用 nmcli 为一张网卡配置多个 ip 地址

首先需要先创建一个连接使其获得静态或动态 ip 地址才能在此基础上增加地址,这里不再讲述配置静态或动态地址的命令,直接进行增加地址的配置

语法:

nmcli con modify <连接名> +ipv4.address <ipv4地址> ipv4.gateway <网关> ipv4.dns <dns地址>

示例:

nmcli con modify ens32 +ipv4.address 192.168.10.160/24 ipv4.gateway 192.168.10.254 ipv4.dns 114.114.114.114
nmcli con up ens32

使用 nmcli 修改网卡设备的连接名称

语法:

nmcli con modify <原连接名或UUID值> connection.id <新连接名>

示例:

先查看网卡设备的各项信息

nmcli con show
NAME        UUID                                  TYPE      DEVICE 

有线连接 1   b640bf63-ac94-3547-be75-8fac06083304  ethernet  ens32     

修改网卡设备的连接名称为 ens32

nmcli con modify b640bf63-ac94-3547-be75-8fac06083304 connection.id ens32

再次查看网卡设备的各项信息,可以发现 NAME 这一栏的名称被修改了

nmcli con show
NAME        UUID                                  TYPE      DEVICE 

ens32       b640bf63-ac94-3547-be75-8fac06083304  ethernet  ens32     

也可以根据原连接名称修改

nmcli con modify "有线连接 1" connection.id ens32

无线网络配置

打开/关闭无线网络开关

语法:

nmcli radio all <on/off>

示例:

nmcli radio all on

查看无线网络开关状态:

语法:

nmcli radio <all--默认>

示例:

nmcli radio 
  WIFI-HW  WIFI    WWAN-HW  WWAN   
  已启用   已启用  已启用   已启用 

连接无线网络

扫描可用的无线网络

nmcli device wifi list

这个命令会列出所有可用的无线网络及其详细信息。

连接到无线网络

如果您知道无线网络的 SSID(网络名称),可以直接连接:

语法:

nmcli dev wifi connect <SSID> password <network-password>

示例:

nmcli device wifi con 李李密制十三香 password MySkillstree
  设备 "wlx0013ef6f25bd" 成功以 "c2d01c8d-47e5-41ee-8a3c-171aaddf53a8" 激活。

如果您知道无线网络的 SSID(网络名称)但不想显示密码,可以加入-a 或 --ask 参数,此参数会询问缺少的参数

语法:

nmcli -a device wifi con <SSID>

示例:

nmcli -a device wifi con 李李密制十三香
  密码: ••••••••••••
  设备 "wlx0013ef6f25bd" 成功以 "afc44524-ba51-452b-ae51-21f2cd2b2f6f" 激活。

查看连接状态

连接尝试后,您可以检查连接状态:

nmcli connection show
  NAME            UUID                                   TYPE      DEVICE          
  李李密制十三香   afc44524-ba51-452b-ae51-21f2cd2b2f6f   wifi      wlx0013ef6f25bd

查看连接的详细信息

语法:

nmcli connection show <connetcion-name>

示例:

nmcli connection show  李李密制十三香

0

开启无线热点(AP 模式)

查看当前无线网卡是否支持 AP 模式:

安装 iw 命令

apt install iw -y

使用 iw 命令查看当前无线网卡是否支持 AP 模式

iw list
或
# iw list | grep -A 20 "Supported interface modes:" | grep -B 10 "Band 1:"

查找到 Supported interface modes: ​字段下是否有 AP ​字样,有则代表该无线网卡支持 AP 模式

添加无线网络并关闭自动连接

语法:

nmcli con add con-name <连接名> ifname <网卡名> type wifi 802-11-wireless.ssid <SSID> 802-11-wireless-security.key-mgmt <wpa-psk/wpa-eap/ieee8021x/none> 802-11-wireless-security.psk <预共享密钥> autoconnect <on/off>
  • wpa-psk:这是使用预共享密钥(PSK)的 WPA(Wi-Fi Protected Access)安全模式。这种模式要求所有客户端都使用相同的密码进行身份验证,是家庭和小型企业网络中常用的安全方式。wpa-psk 后加 psk 参数和预共享密钥

  • wpa-eap:这是使用扩展认证协议(EAP)的 WPA 安全模式。结合 WPA 的安全性和 802.1X 的认证机制,通常用于需要更高安全性的场景,如企业网络。wpa-eap 后可加的参数有:802-1x.eap、802-1x.phase2-auth、802-11-wireless-security.psk、802-1x.cert-path/802-1x.private-key-path、用户名和密码等

  • ieee8021x:这是使用 802.1X 认证协议的安全模式。在这种模式下,客户端需要通过认证服务器(如 RADIUS 服务器)进行身份验证。ieee8021x 后可加的参数有:认证方法(如:802-1x.eap)、证书和私钥(如:EAP-TLS)、认证服务器(如:RADIUS 服务器)、用户身份和密码(802-1x.identity 指定用户名和 802-1x.password 指定密码)等

  • none:这表示不使用密钥管理,即无线网络不使用加密或身份验证。这种方式非常不安全,不建议在公共或未受保护的环境中使用

示例:

使用 wpa-psk 模式创建一个最常用的无线网络连接安全模式,我这里的无线网卡设备名为:wlx0013ef6f25bd

nmcli con add con-name MySkillstree ifname wlx0013ef6f25bd type wifi 802-11-wireless.ssid MySkillstree  802-11-wireless.mode ap 802-11-wireless-security.key-mgmt wpa-psk 802-11-wireless-security.psk a1234567 autoconnect no
  连接 "MySkillstree" (7f0c422d-644e-4c98-b615-8eac99304139) 已成功添加。

以上配置命令过长和繁琐,可以简写为以下命令:

nmcli con add con-name MySkillstree ifname wlx0013ef6f25bd type wifi ssid MySkillstree mode ap wifi-sec.key-mgmt wpa-psk wifi-sec.psk a1234567 autoconnect no
  连接 "MySkillstree" (7f0c422d-644e-4c98-b615-8eac99304139) 已成功添加。

其中:

  • 802-11-wireless.ssid 可缩写为 ssid

  • 802-11-wireless.mode ap 可缩写为 mode ap

  • 802-11-wireless-security 可缩写为 wifi-sec

当然如果就只使用 wpa-psk 模式创建简单的个人热点,也可以使用 device 参数进行快速创建

nmcli device wifi hotspot con-name MySkillstree ifname wlx0013ef6f25bd ssid MySkillstree password a1234567
  设备 "wlan0" 成功以 "1facecb6-bf75-461a-b847-b63911bb3f61" 激活。
  提示:"nmcli dev wifi show-password" 显示 Wi-Fi 名称和密码。

为无线网卡接口配置地址

nmcli con modify MySkillstree ipv4.method manual ipv4.address 10.0.0.1/24 ipv4.gateway 10.0.0.1 ipv4.dns 114.114.114.114

安装 dhcp 服务

用于下发无线热点和管理连接到热点的设备的 DNS 和 DHCP(ubuntu、kali 中为 isc-dhcp-server,在 centos 中为 dhcpd)

apt install isc-dhcp-server
vim /etc/dhcp/dhcpd.conf
修改以下内容:
subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.1 10.0.0.100; 
  option domain-name-servers 114.114.114.114;
  option subnet-mask 255.255.255.0;
  option routers 10.0.0.1; 
  option broadcast-address 10.0.0.255;
}
保存退出

指定 dhcp 服务下发地址的物理接口(当系统中存在多个网卡设备,不做会报错)

vim /etc/default/isc-dhcp-server
修改以下内容:
INTERFACESv4="wlx0013ef6f25bd"
保存退出

进行源地址转换 SNAT

网关默认是不知道我们自己创建的这个 ip 地址的,只有使用地址转换技术 NAT 将无线网卡上的收到的地址转换成我们连接公网的地址才能正常访问互联网

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens32 -j MASQUERADE

查看 SNAT 转换列表

iptables -t nat -nvL POSTROUTING
 Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts   bytes  target     prot opt  in     out      source               destination         
   0     0    MASQUERADE   0    --  *      ens32    10.0.0.0/24          0.0.0.0/0

开启路由转发

Linux 系统默认不转发路由,只有开启路由转发后才会转发其他网卡接受到的数据包

echo "net.ipv4.ip\_forward \= 1 " \>\> /etc/sysctl.conf

重启 DHCP 服务和新建 WiFi 热点

systemctl restart isc-dhcp-server
nmcli con up MySkillstree

此时通过手机连接到热点后可以正确获取地址和上网

0

这里还有一点要注意:

如果是外接的 usb 无线网卡到虚拟机内,有可能会导致驱动和内核不匹配,即使无线网卡支持 AP 模式也能正常连接 WiFi,但是在开启个人热点时依旧会报错 802.1x 认证超时

当然以上情况会有但是不常见,但还是建议开启个人热点的话还是在自带 wifi 模块的 Linux 物理机上进行比较好

其他设置:

对于其他设置如:动静态地址,修改连接名称,删除连接等均与有线网络设置一样,这里就不在讲述

VLAN 相关配置

创建 vlan(二层)

创建一个 vlan100 接口并将物理网卡 ens32 绑定到 vlan100 中,这里的 vlan 是虚拟设备常被用做子接口配置,同样 bond 和 team 类型的网络接口也可以被配置为子接口

语法:

nmcli con add con-name <连接名称> ifname <接口名称> type vlan id <vlan-id> dev <网卡设备> ipv4.method manual ipv4.address <ipv4地址> ipv4.gateway <网关> ipv4.dns <dns地址>

示例:

nmcli con add con-name vlan100 ifname vlan100 type vlan id 100 dev ens32 ipv4.method manual ipv4.address 192.168.100.100/24 ipv4.gateway 192.168.100.254 ipv4.dns 114.114.114.114

0

网桥 Bridge 配置

bridge 是内核提供的虚拟以太网桥,原理上类似于物理交换机,工作在第二层,可以将多个以太网接口连接在一起,使它们成为一个逻辑上的以太网段。这样,在同一个网桥上的设备可以直接通信,就像它们连接在同一个物理以太网上一样,同样也可以配置生成树(STP)协议

要注意的是,绑定为 bridge 上的成员接口都无法配置地址且可以和 bridge 共用一个地址,如果要配置地址进行通信,可以配置子接口进行通信

创建名为 br-vxlan 的网桥

创建一个名为 br-vxlan 的网桥且不设置 ip 地址

语法:

nmcli con add con-name <连接名> ifname <接口名> type bridge ipv4.method disabled ipv6.method disabled

示例:

nmcli con add con-name br0 ifname br0 type bridge ipv4.method disabled ipv6.method disabled

VXLAN 配置

VXLAN 可将二层报文用四层协议进行封装,即在四层网络的基础上构建一个虚拟的二层网络进行二层通信,包括广播

注意!!!

1、请事先关闭或放行防火墙和 SELinux 等

2、以下实验如果是两个 ubuntu 虚拟机且其中一个是克隆,配置 VXLAN 时当接口名称(ifname)一样时可能会出现两个 vxlan 接口的 MAC 地址一样的情况。

正常来讲 Mac 地址是唯一的,但是可能因为是 vmware 的小 bug 吧,导致罕见的 Mac 地址会冲突。此时可以更改接口名称(ifname)为其他的,只要 VNI 也就是 vxlan 的 id 值一样就不影响,或者使用工具将某一 vxlan 接口的 mac 地址修改但这种方法通常关机后会恢复。

这种情况下使用 wireshark 抓包只能抓到对放发来的 arp 报文,但是没有 arp 回应报文,因为双方的 mac 地址一样,会被误以为是自己发的,就不会发送 arp 回复报文。

单播模式(点对点)

语法:

nmcli con add con-name <连接名> ifname <接口名> type vxlan id <vni> local <本地地址> remote <对端地址> destination-port <UDP端口,默认为4789> dev <设备名> ipv4.method manual ipv4.address <ipv4地址> ipv4.gateway <网关> ipv4.dns <dns地址>

示例:

创建名为 vxlan100 的 vxlan 接口,指定其 vni、对端 ip、目的 udp 端口和本设备上承载 vxlan 流量的物理接口

nmcli con add con-name vxlan100 ifname vxlan100 type vxlan id 100 local 192.168.10.100 remote 192.168.10.200 destination-port 4789 dev ens32 ipv4.method manual ipv4.address 172.16.0.1/24 ipv4.gateway 172.16.0.254
nmcli con up vxlan100 

查看 vxlan0 的详细信息

ip -d link show vxlan100

0

查看系统路由表会发现多了 172.16.1.0/24 网段的路由表

route -n
内核 IP 路由表
目标            网关            子网掩码        标志  跃点    引用     使用 接口
0.0.0.0         192.168.10.2    0.0.0.0         UG    100    0        0 ens32
0.0.0.0         172.16.0.254    0.0.0.0         UG    20500  0        0 vxlan100
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens32
172.16.0.0      0.0.0.0         255.255.255.0   U     500    0        0 vxlan100
192.168.10.0    0.0.0.0         255.255.255.0   U     100    0        0 ens32

查看 vxlan 的 fdb 表(转发表)

bridge fdb show dev vxlan100
    00:00:00:00:00:00 dst 192.168.10.200 via ens32 self permanent

这个表项的意思是,默认的 VTEP 对端地址为 192.168.10.200。换句话说,原始报文经过 vxlan0 后,会被内核加上 VXLAN 头部,而外部 UDP 头部的目的 IP 地址为 192.168.10.200(源 VTEP 封包过程)

此时对端设备也配置 vxlan100

保证 VNI 也是 100,dstport 也是 4789,并修改 VTEP 的 local 和 remote IP 地址的值。

nmcli con add con-name vxlan100 ifname vxlan100 type vxlan id 100 local 192.168.10.200 remote 192.168.10.100 destination-port 4789 dev ens32 ipv4.method manual ipv4.address 172.16.0.2/24 ipv4.gateway 172.16.0.254
nmcli con up vxlan100

ping 测试

ping 172.16.0.2 -I 172.16.0.1

0

多播模式(点对多点)

要组成同一个 VXLAN 网络,VTEP 必须能够感知到彼此的存在,多播组本身的功能就是把网络中的某个节点组成一个虚拟的组,所以 VXLAN 最初想到用多播来实现也是很自然的。

注意,如果 VXLAN 要使用多播,那么底层网络结构需要支持多播功能

本实验与前面的实验比较相似,只不过主机之间不是点对点的连接,而是通过多播组成一个虚拟的整体。

1、在 host1 配置,使用多播模式

此时参数 remote 应指定相同的多播地址(范围: 224.0.0.0~239.255.255.255)

nmcli con add con-name vxlan101 ifname vxlan101 type vxlan id 101 local 192.168.10.100 remote 239.1.1.1 destination-port 4789 dev ens32 ipv4.method manual ipv4.address 172.17.0.1/24 ipv4.gateway 172.17.0.254
nmcli con up vxlan101

2、在 host2 配置,使用多播模式

此时参数 remote 应指定相同的多播地址(范围: 224.0.0.0~239.255.255.255)

nmcli con add con-name vxlan101 ifname vxlan101 type vxlan id 101 local 192.168.10.200 remote 239.1.1.1 destination-port 4789 dev ens32 ipv4.method manual ipv4.address 172.17.0.2/24 ipv4.gateway 172.17.0.254
nmcli con up vxlan101

3、互 ping 测试

0

VXLAN+ 网桥网络(Bridge)+ 组播

上述的点对点 VXLAN 网络通信双方只有一个 VTEP,且只有一个通信实体,而在实际生产中(主要是云服务器),每台物理机上都有几十台甚至上百台虚拟机或容器需要通信,因此需要一种机制将这些通信实体组织起来,再通过隧道口 VTEP 转发出去。

方案其实也很常见,Linux Bridge 就可以将多块虚拟网卡连接起来,因此可以选择使用 Bridge 将多个虚拟机或容器放到同一个 VXLAN 网络中。和上面的模式相比,这里只是多了一个 Bridge,用来连接不同 network namespace (网络名称空间)中的 veth pair,同时 VXLAN 网卡也需要连接到该 Bridge。

#其实说大白话就是:

  • 点对点的是设备-1 和设备-2 的虚拟二层通信;

  • 多播是多个设备之间的虚拟二层通信;

  • 而 VXLN+Bridge 则多用于多设备内都开了很多虚拟机,这些虚拟机跨物理机之间的虚拟二层通信的云计算场景

题目:

  • 在两台物理设备上创建网络命名空间 ns0 和 ns1,veth pair

  • 新建 vxlan 隧道,网桥名称为 br-vxlan,网桥的出口为 vxlan103,id 为 103

  • 设备-1 的 vxlan 隧道地址为 172.18.0.1/24,设备-2 的 vxlan 隧道地址为 172.18.0.2/24.

  • 新建网桥 bridge,将 vxlan 网络和 veth pair 绑定到 bridge 上

  • 测试不同设备中命名空间内网络的二层联通性。

注意!!!

以下实验如果是在两台 ubuntu 虚拟机上做的,且一台为克隆,最好将 vxlan,bridge,veth pair 的 ifname 修改,否则可能会有 mac 地址冲突的情况发生,会导致实验结果不通

1、host1 创建 vxlan+bridge+ 组播网络:

# 创建vxlan网络,如果ipv6.method disabled不可用,也可以将disabled换成ignore,主要是为了让其不获取地址
nmcli con add con-name vxlan102 ifname vxlan102 type vxlan id 102 local 192.168.10.100 remote 239.1.1.1 destination-port 4789 dev ens32 ipv4.method disabled ipv6.method disabled
# 然后创建网桥 br0,把 VXLAN 网卡 vxlan102 绑定到上面,如果ipv6.method disabled不可用,也可以将disabled换成ignore,主要是为了让其不获取地址
nmcli con add con-name br0 ifname br0 type bridge ipv4.method disabled ipv6.method disabled
nmcli con modify vxlan102 master br0
# 刷新vxlan102
nmcli con up vxlan102
# 下面创建一对veth pair(veth0和veth1)
ip link add veth0 type veth peer name veth1
# 把veth pair一端veth0绑定到网桥
ip link set veth0 master br0
ip link set veth0 up
# 创建命名空间
ip netns add ns0
# 把veth pair一端veth1放到命名空间
ip link set dev veth1 netns ns0
# 给veth1设置ip
ip netns exec ns0 ip addr add 172.18.0.1/24 dev veth1
# 把veth1 和 lo up
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set veth1 up
# 查看 ns0 的网卡信息
ip netns exec ns0 ip add

2、host2 创建 vxlan+bridge+ 组播网络:

# 创建vxlan网络,如果ipv6.method disabled不可用,也可以将disabled换成ignore,主要是为了让其不获取地址
nmcli con add con-name vxlan102 ifname vxlan102 type vxlan id 102 local 192.168.10.200 remote 239.1.1.1 destination-port 4789 dev ens32 ipv4.method disabled ipv6.method disabled
# 然后创建网桥 br0,把 VXLAN 网卡 vxlan102 绑定到上面,如果ipv6.method disabled不可用,也可以将disabled换成ignore,主要是为了让其不获取地址
nmcli con add con-name br0 ifname br0 type bridge ipv4.method disabled ipv6.method disabled
nmcli con modify vxlan102 master br0
# 刷新vxlan102
nmcli con up vxlan102
# 下面创建一对veth pair(veth0和veth1)
ip link add veth0 type veth peer name veth1
# 把veth pair一端veth0绑定到网桥
ip link set veth0 master br0
ip link set veth0 up
# 创建命名空间
ip netns add ns1
# 把veth pair一端veth1放到命名空间
ip link set dev veth1 netns ns1
# 给veth1设置ip
ip netns exec ns1 ip addr add 172.18.0.2/24 dev veth1
# 把veth1 和 lo up
ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set veth1 up
# 查看 ns1 的网卡信息
ip netns exec ns1 ip add

互 ping 测试,隧道建立需要一定时间,可以耐心等一会

0

Veth Pair 配置

Veth Pair 是成对的虚拟网卡,使用 ip 命令可以创建但是在重启系统后就会失效,而 nmcli 命令创建的所有连接在重启系统后都还会生效

在 centos7/8 中并不支持使用 nmcli 命令配置,而在新版的 ubuntu 和 kali 中是支持的,预计在以后得发行版中也是会支持的

添加一对 Veth 网卡

语法:

nmcli con add con-name <连接名> ifname <网卡名> type veth peer <对端网卡名>

示例:

注意配置时需要配置一对

nmcli con add con-name veth0 ifname veth0 type veth peer veth1
nmcli con add con-name veth1 ifname veth1 type veth peer veth0

此时 veth 会默认关闭,可以通过添加之前内容中添加静态地址的方式添加相应的网卡配置后开启

示例:

nmcli con modify veth0 ipv4.method manual ipv4.address 192.168.10.10/24
nmcli con up veth0

注意:

在 Ubuntu 上配置 veth 后,关机重启,该对 veth 中的一个会因为某种原因(暂时还不知道)无法连接,此时需要重启 NetworkManager 服务后重新打开该对 veth 网卡

systemctl restart NetworkManager
nmcli con up veth0
nmcli con up veth1

静态路由相关配置

添加静态路由和优先级

语法:

nmcli con modify <连接名> ipv4.routes "<目标网段/子网掩码> <下一跳>"
或
nmcli con modify <连接名> ipv4.routes "<目标网段/子网掩码> <下一跳> <优先级>"
nmcli con up <连接名>

示例:

nmcli con modify ens32 ipv4.routes "10.0.0.0/24 192.168.10.2 99"

注意:

1、在命令中如果未设置优先级则默认为 100

2、优先级越小越优先,如:100 > 110

3、默认路由的优先级无法更改

4、删除静态路由无需添加优先级选项

关闭 Flow Control

在低延迟、高带宽的内网环境中,关闭 Flow Control 可避免在网卡速率快占满的情况下与对端协商降低文件传输速率,比如无中间设备控制转发速率的情况下,NAS 系统中原本可传输速度在 125MB/S,可能被降低到 50MB/S 左右;但在流量控制至关重要的环境中,保持暂停功能可能更合适;不过一般情况下还是关闭吧,毕竟如果是对公网用户提供服务,一般也跑不满网卡速率;

nmcli connection modify "ens33" ethtool.pause-autoneg off ethtool.pause-rx off ethtool.pause-tx off
nmcli con up ens33