在Linux系统上使用nmcli命令配置各种网络(有线、无线、vlan、vxlan、路由、网桥等)
1、更新于2024/5/13,新增Veth Pair配置
2、更新于2024/5/19,修复NetworkManager接管网络配置无效的错误
3、更新于2024/5/20,新增Ubuntu两种版本下NetworkManager接管网络的配置
目录
一、配置NetworkManager接管网络(选)
安装Network-Manager并启动
netplan管理网络的系统
ifupdown管理网络的系统
二、nmcli的相关配置(后置参数均可缩写)
有线网络配置
使用nmcli添加一个网卡并配置静态ip地址
激活/关闭网卡
使用nmcli修改一个网卡的地址
使用nmcli添加一个网卡配置使其获取动态ip地址
使用nmcli将已有的静态网卡配置修改为动态网卡配置
使用nmcli将已有的动态网卡配置修改为静态网卡配置
使用nmcli删除一个网卡配置信息
使用nmcli为一张网卡配置多个ip地址(从地址)
使用nmcli修改网卡设备的连接名称
无线网络配置(需要有无线网卡)
打开/关闭无线网络开关
查看无线网络开关状态:
连接无线网络
扫描可用的无线网络
连接到无线网络
查看连接状态
查看连接的详细信息
开启无线热点(AP模式)
查看当前无线网卡是否支持AP模式:
为无线网卡接口配置地址
安装dhcp服务
进行源地址转换SNAT
开启路由转发
重启DHCP服务和新建WiFi热点
其他设置:
VLAN相关配置
创建vlan
网桥Bridge配置
创建名为br-vxlan的网桥
VXLAN配置
单播模式(点对点)
多播模式(点对多点)
在host1配置,使用多播模式
在host2配置,使用多播模式
互ping测试
VXLAN+网桥网络(Bridge)+组播
host1创建vxlan+bridge+组播网络:
host2创建vxlan+bridge+组播网络:
Veth Pair配置
静态路由相关配置
三、总结
???
你是否会遇到在不同的Linux系统中配置网络时,修改的配置文件和语法都不一样的烦恼呢?
各种不同的文件路径和语法,甚至Ubuntu系统中每隔几代网络配置文件就会变换位置和语法,这种情况非常不利于我们日常对系统的维护和管理。
对于这种情况,我们可以使用NetworkManager工具在不同的系统上进行统一语法的配置与管理
现阶段所发行的Linux版本基本都支持NetworkManager工具进行统一管理
如果配置时发生语法错误,该工具将会暂停修改该网络,不会造成配置文件错误而导致的一系列问题
甚至当你将原网络配置文件删除后,只要使用命令创建一个和原先参数一样的网络接口,该配置文件就会自动的重新生成
使用该工具配置的所有网络配置文件会存于/etc/NetworkManager/system-connections/目录下
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
保存退出
使配置应用到系统中
netplan apply
ifupdown管理网络的系统
如果是ifupdown管理网络的系统(如eve-ng或Ubuntu18.04)需要:
1、在NetworkManager配置中指定ifupdown也可管理网络,这样如果系统原先存在有网络连接,在NetworkManager接管后原网络连接依旧存在不改变:
vim /etc/NetworkManager/NetworkManager.conf
修改以下内容:
managed=true
保存退出
2、创建.yaml文件并修改(如果原先存在有后缀为.yaml的文件,直接修改即可,没有的话再创建)
vim /etc/netplan/interface.yaml
添加以下内容:
network:version: 2renderer: 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.addresses <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 --
使用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
使用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 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 showNAME UUID TYPE DEVICE 李李密制十三香 afc44524-ba51-452b-ae51-21f2cd2b2f6f wifi wlx0013ef6f25bd
查看连接的详细信息
语法:
nmcli connection show <connetcion-name>
示例:
nmcli connection show 李李密制十三香
开启无线热点(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
安装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.2 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 POSTROUTINGChain 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
此时通过手机连接到热点后可以正确获取地址和上网
这里还有一点要注意:
如果是外接的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
网桥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
查看系统路由表会发现多了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 vxlan10000: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
多播模式(点对多点)
要组成同一个VXLAN网络,VTEP必须能够感知到彼此的存在,多播组本身的功能就是把网络中的某个节点组成一个虚拟的组,所以VXLAN最初想到用多播来实现也是很自然的。
注意,如果VXLAN要使用多播,那么底层网络结构需要支持多播功能
本实验与前面的实验比较相似,只不过主机之间不是点对点的连接,而是通过多播组成一个虚拟的整体。
在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
在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
互ping测试
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地址冲突的情况发生,会导致实验结果不通
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
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测试,隧道建立需要一定时间,可以耐心等一会
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"
nmcli con up ens32
查看系统路由表
route -n
删除静态路由
语法:
nmcli con modify <连接名> -ipv4.routes "<目标网段/子网掩码> <下一跳>"
nmcli con up <连接名>
示例:
nmcli con modify ens32 -ipv4.routes "10.0.0.0/24 192.168.10.2"
nmcli con up ens32
注意:
1、在命令中如果未设置优先级则默认为100,默认路由的值不一定,有的为100有的为20100;
2、优先级越小越优先,如:100 > 110
3、由网关生成的默认路由的优先级无法更改
4、删除静态路由无需添加优先级选项
三、总结
本文所有内容都由我亲自试验并总结,如果有朋友转载,请标明出处
毕竟网上对于NetworkManager工具的各种解释都过于片面,也没有一个比较全面的示例,所以在本文上我还是耗费了很多的精力和时间的
这其中当属无线网络的AP模式开启和两个ubuntu系统配置Vxlan上最耗费时间
因为是虚拟机,会遇到各种各样的不适配或者其他bug,都需要一样找出问题来
目前这里暂时只展现这些最常用的配置示例,目的是为了让大家在以后面对各式各样的Linux系统时能够更便捷的进行统一的网络配置
当然后期也会逐渐对本文进行补充和更改,感谢支持!!!
相关文章:
在Linux系统上使用nmcli命令配置各种网络(有线、无线、vlan、vxlan、路由、网桥等)
1、更新于2024/5/13,新增Veth Pair配置 2、更新于2024/5/19,修复NetworkManager接管网络配置无效的错误 3、更新于2024/5/20,新增Ubuntu两种版本下NetworkManager接管网络的配置 目录 一、配置NetworkManager接管网络(选&…...
计算机网络 (25)IPV6
前言 IPv6,全称为“互联网协议第6版”(Internet Protocol Version 6),是由互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议。 一、产生背景 IPv4,即互联网协议第4版,是现行…...
Git 安装 操作 命令 远程仓库 多人协作
Git作用 Git诞生史 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在…...
线性回归的改进-岭回归
2.10 线性回归的改进-岭回归 学习目标 知道岭回归api的具体使用 1 API sklearn.linear_model.Ridge(alpha1.0, fit_interceptTrue,solver"auto", normalizeFalse) 具有l2正则化的线性回归alpha:正则化力度,也叫 λ λ取值:0~1 1~10solver:会根…...
【LC】2469. 温度转换
题目描述: 给你一个四舍五入到两位小数的非负浮点数 celsius 来表示温度,以 摄氏度(Celsius)为单位。 你需要将摄氏度转换为 开氏度(Kelvin)和 华氏度(Fahrenheit),并以…...
【在安卓平台上,Unity与C/C++编写的.so动态库交互的实现】
在安卓平台上,Unity与C/C++编写的.so动态库交互的实现,通常通过JNI(Java Native Interface)和P/Invoke机制来完成。通过这种方式,C#脚本可以调用C/C++代码中的函数,并与本地库进行交互。 以下是一个简单的步骤演示,展示如何在Unity中与安卓平台上的.so动态库交互。 步…...
【llm/ollama/qwen】在本地部署qwen2.5-coder并在vscode中集成使用代码提示功能
说在前面 操作系统:windows11ollama版本:0.5.4vscode版本:1.96.2continue插件版本:0.8.66 ollama安装 访问官网,点击下载安装即可 默认装在了C盘,比较蛋疼;但是可以指定路径安装:Ol…...
C语言练习:求数组的最大值与最小值
文章目录 1. 提出任务2. 完成任务2.1 方法一:通过返回结构体指针来间接返回结果2.1.1 编写程序,实现功能2.1.2 运行程序,查看结果 2.2 方法二:通过参数传递数组,并在函数中修改传入的参数2.2.1 编写程序,实…...
【TCP】SYN、ACK、FIN、RST、PSH、URG的全称
在 TCP 协议中,SYN、ACK、FIN、RST、PSH 和 URG 都是控制标志位(Flags),每个标志位对应不同的功能。它们的全称如下: URG:(URGent)紧急 ACK:(ACKnowledgment)确认 PSH:(PuSH)推送 RS…...
Re77 读论文:LoRA: Low-Rank Adaptation of Large Language Models
诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:LoRA: Low-Rank Adaptation of Large Language Models ArXiv网址:https://arxiv.org/abs/2106.09685 官方GitHub网站(包含在RoBERTa、DeBERTa、GPT-2上用Lora微调…...
《OpenCV 4.10.0 实例:开启图像处理新世界》
《OpenCV 4.10.0 实例:开启图像处理新世界》 一、OpenCV 4.10.0 初印象二、环境搭建:开启 OpenCV 之旅(一)不同系统安装指南(二)配置细节与技巧 三、基础图像处理实例(一)图像读取、…...
硬件电路(3)-PT100温度采集电路
一、概述 PT100是铂热电阻,它的阻值会随着温度的变化而改变。PT后的100即表示它在0℃时阻值为100欧姆,在100℃时它的阻值约为138.5欧姆。它的工作原理:当PT100在0摄氏度的时候它的阻值为100欧姆,它的阻值会随着温度上升而成匀速增…...
计算机网络——数据链路层-流量控制和可靠传输
一、流量控制 流量控制是指由接收方及时控制发送方发送数据的速率,使接收方来得及接受。 • 停止等待流量控制 • 滑动窗口流量控制 1、停止—等待流量控制 停止-等待流量控制的基本原理是发送方每发出一帧后,就要等待接收方的应答信号ÿ…...
sqlserver数据库备份和还原
一、备份 打开smss,选中数据库-任务-备份 地址选择默认如:C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\ (远程服务器文件夹,非本机文件夹) PS:备份后编辑下数据 二、还原 PS:如果提示数…...
Python爬虫基础——认识网页结构(各种标签的使用)
1、添加<div>标签的代码定义了两个区块的宽度和高度均为100px,边框的格式也相同,只是区块中显示的内容不同; 2、添加<ul>和<ol>标签分别用于定义无序列表和有序列表。<il>标签位于<ul>标签或<ol>标签之…...
Linux双端口服务器:端口1的文件系统目录挂载到端口2
目录 一、服务器安装NFS服务并配置二、文件挂载三、持久化挂载总结为什么服务器配置多个端口 目前有一台服务器,不过他设置了两个SSH的端口,通过下面方法可以让这两个端口连接的主机能够共享同一个文件系统,原本这两个端口的文件系统是隔离的…...
unity学习11:地图相关的一些基础
目录 1 需要从 unity的 Asset Store 下载资源 1.1 下载资源 1.2 然后可以从 package Manager 里选择下载好的包,import到项目里 2 创建地形 2.1 创建地形 2.2 地形 Terrain大小 2.3 各种网格的尺寸大小 2.4 比较这个地形尺寸和创建的其他物体的大小对比 3 …...
如何在 Spring Cloud Gateway 中创建全局过滤器、局部过滤器和自定义条件过滤器
Spring Cloud Gateway 是一个功能强大的 API 网关,能够处理 HTTP 请求、响应及路由。通过过滤器机制,您可以在请求和响应过程中进行各种处理操作,如记录日志、身份验证、限流等。Spring Cloud Gateway 提供了三种主要类型的过滤器:…...
总分支机构跨网文件交换解决方案几个关键要点
跨国公司和国内大型集团的日常运营中,总分支机构之间的文件交换已成为必不可少的环节。然而,跨网文件交换面临着诸多挑战,比如安全性、效率、合规性、管理便捷性、技术兼容性和成本效益等。 为了解决这些问题,在挑选总分支机构跨网…...
机器人手眼标定
机器人手眼标定 一、机器人手眼标定1. 眼在手上标定基本原理2. 眼在手外标定基本原理 二、眼在手外标定实验三、标定精度分析 一、机器人手眼标定 要实现由图像目标点到实际物体上抓取点之间的坐标转换,就必须拥有准确的相机内外参信息。其中内参是相机内部的基本参…...
将 Docker 数据迁移到新磁盘:详细操作指南
将 Docker 数据迁移到新磁盘:详细操作指南 背景 在容器化应用的部署中,Docker 通常将数据存储在默认的 /var/lib/docker 目录。然而,随着容器数量的增加和镜像的累积,该目录可能会迅速占满系统磁盘空间,从而影响系统…...
AWS re:Invent 的创新技术
本月早些时候,Amazon 于 12 月 1 日至 5 日在内华达州拉斯维加斯举行了为期 5 天的 re:Invent 大会。如果您从未参加过 re:Invent 会议,那么最能描述它的词是“巨大”——不仅从与会者人数(60,000 人)来看&…...
无人机低小慢探测难题!
一、探测难度增加 由于无人机的雷达散射面积小,雷达在探测时接收到的反射信号相对较弱。这使得雷达系统需要更高的灵敏度和更先进的信号处理算法才能有效捕捉到无人机的信号。在复杂环境中,如城市、山区或海洋,背景噪声和干扰源众多…...
第2章:Go语言基础语法
第2章:Go语言基础语法 1. 变量和数据类型 1.1 基本数据类型 Go语言提供了以下基本数据类型: // 整数类型 var intVar1 int // 根据系统位数,32或64位 var intVar2 int8 // -128 到 127 var intVar3 int16 // -32768 到 32767 var i…...
RP2K:一个面向细粒度图像的大规模零售商品数据集
这是一种用于细粒度图像分类的新的大规模零售产品数据集。与以往专注于相对较少产品的数据集不同,我们收集了2000多种不同零售产品的35万张图像,这些图像直接在真实的零售商店的货架上拍摄。我们的数据集旨在推进零售对象识别的研究,该研究具…...
pnpm安装与使用
pnpm官网 全局安装 npm install pnpm -g设置源 // 查看源 pnpm config get registry // 切换淘宝源 pnpm config set registry https://registry.npmmirror.com/ 移除 pnpm remove 包名称 // 移除包 pnpm remove 包名称 --global // 移除全局包 更新 pnpm up // 更新所有…...
c# 服务中启动exe窗体程序
Windows服务默认在会话0(Session 0)中运行,这是一个隔离的环境,旨在防止服务与应用程序和用户会话交互,从而提高系统的稳定性和安全性。由于这个原因,直接从服务启动的GUI应用程序将不会显示,因…...
使用pip-chill清理pip依赖包,清理不使用的包
最近需要精简python项目的依赖,需要清理一下哪些代码里面没有使用的包,查询了一下,记录 pip-chill 是一个用于管理 Python 项目中依赖项的工具,可以帮助您保持所需依赖项的清单简洁明了,并删除不必要的依赖。 1. 安装 …...
【算法题系列】LeetCode 5.最长回文子串|JavaScript 5种思路实现
题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: &q…...
QT6编程入门(一)
1、QT6介绍 1.1、QT6概述 Qt 是一个跨平台的 C 应用程序框架,它被广泛用于开发图形用户界面(GUI)应用程序,同时也可以用于开发非GUI程序,如控制台工具和服务器。Qt 被设计成能够在多种操作系统上运行,包括…...
串口通信控制LED、马达、蜂鸣器、风扇
1.STM32U575RITx 设置引脚 编写main.c //对fputc重写,方便调用printf函数 int fputc(int ch, FILE* F){HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 10);return ch; } //main函数的主要循环while (1){char whole_buf[128];memset(whole_buf, 0, siz…...
每日一题:BM2 链表内指定区间反转
文章目录 链表区间反转教学内容1. 任务描述2. 题目分析例子 3. 思路4. 详细步骤4.1 创建虚拟头节点4.2 寻找反转区间的前一个节点4.3 反转区间中的节点4.4 重新连接链表4.5 返回结果 5. 代码实现6. 代码解析6.1 初始化虚拟头节点6.2 寻找反转区间的前一个节点6.3 反转区间中的节…...
Cherno C++学习笔记 P50 C++当中的动态库
在上一篇文章当中我们学习了C当中是如何使用静态库的,这一篇我们会讲一下如何使用动态库,并同样用GLFW这个已有的库来举例子。 有了静态库的经验,其实动态库就好理解和使用多了。这两者的区别是,静态链接发生在编译的时候&#x…...
【Flink CDC】Flink CDC的Schema Evolution表结构演变的源码分析和流程图
Flink CDC版本:3.2.1 说明:本文从SchemaOperator接收到,表结构变更事件开始,表结构变更事件应由source端产生,本文不讨论。 可以先看流程图,研究源码。 参考文章: Flink cdc3.0动态变更表结构—…...
计算机网络 (27)IP多播
前言 IP多播(也称多址广播或组播)技术是一种允许一台或多台主机(多播源)发送单一数据包到多台主机(一次性的、同时的)的TCP/IP网络技术。 一、基本概念 定义:多播作为一点对多点的通信ÿ…...
当算法遇到线性代数(四):奇异值分解(SVD)
SVD分解的理论与应用 线性代数系列相关文章(置顶) 1.当算法遇到线性代数(一):二次型和矩阵正定的意义 2.当算法遇到线性代数(二):矩阵特征值的意义 3.当算法遇到线性代数࿰…...
鸿蒙操作系统(HarmonyOS)
鸿蒙操作系统(HarmonyOS)是华为公司推出的一款面向未来、面向全场景的分布式操作系统。它旨在为用户提供一个更加智能、便捷和安全的操作环境,支持多种终端设备之间的无缝协作。在鸿蒙应用开发中,ArkUI作为官方推荐的用户界面开发…...
通义灵码在跨领域应用拓展之物联网篇
目录 一.引言 二.通义灵码简介 三.通义灵码在物联网领域的设备端应用 1.传感器数据采集 (1).不同类型传感器的数据读取 (2).数据转换与预处理 2.设备控制指令接收和执行 (1).指令解析与处理 (2).设备动作执行 四.通义灵码在物联网领域的云端平台应用 1.数据存储和管…...
CSS语言的数据库交互
CSS语言的数据库交互:一种新潮流的探索 引言 在现代网页开发中,CSS(层叠样式表)无疑是构建优美和响应式网页的重要工具。然而,关于CSS和数据库之间的直接交互,尽管并不是一种常见的做法,却引发…...
[SMARTFORMS] 创建二维码
我们可以使用事务码SE73创建二维码 选择系统条形码,点击"更改"按钮 点击 创建选项 选择"新" 输入二维码名称和简短描述,点击"确认"按钮 选择"QR CODE 2005",点击"确认"按钮 选择"No…...
数据项目相关的AWS云计算架构设计
电商数据平台架构 高性能:使用Amazon EC2的计算优化实例处理业务逻辑和数据计算,搭配Amazon ElastiCache内存缓存,加速数据读取。应用负载均衡器(ALB)在EC2实例间分发流量,实现负载均衡。高可用性…...
智慧农业应用场景|珈和科技高标准农田信息化监管平台解决方案
近年来,珈和科技持续深耕农业领域,深耕农业时空大数据服务。 珈和利用遥感大数据、云计算、移动互联网、物联网、人工智能等先进技术,搭建“天空地一体化”监测体系,并创新建设了150的全球领先算法模型,可为100多种农作…...
C++ operator = 返回void 会发生什么?
1.operator 正常情况 #include <iostream> using namespace std;class Box { public:Box(double L) : length(L) {}Box(const Box& b){}Box& operator (const Box&){return *this;}public:double length; // 长度 };int main() {Box box1(1.0);Box box2(…...
Scala 模式匹配
Scala 模式匹配 引言 Scala 作为一种多范式编程语言,不仅支持面向对象编程,还融合了函数式编程的特性。在其丰富的特性集中,模式匹配(Pattern Matching)尤为引人注目,它是一种在许多编程语言中都有应用的编程范式,但在 Scala 中得到了特别强大的支持。模式匹配允许开发…...
微信小程序中 “页面” 和 “非页面” 的区别
微信小程序中 “页面” 和 “非页面” 的区别,并用表格进行对比。 核心概念: 页面 (Page): 页面是微信小程序中用户可以直接交互的视图层,也是小程序的基本组成部分。每个页面都有自己的 WXML 结构、WXSS 样式和 JavaScript 逻辑…...
解耦Java应用程序的方法和技巧
解耦 Java 应用程序是一项重要的设计原则是减少组件之间的依赖关系,使系统更加模块化、灵活和可维护。通过分离,您可以更轻松地更改、扩展或测试应用程序的各个部分,而不会影响其他部分。 分离 Java 应用程序需要应用减少组件之间直接依赖关系…...
Go语言的 的设计模式(Design Patterns)基础知识
Go语言的设计模式基础知识 引言 设计模式是一种在软件开发中经常使用的解决特定问题的通用方案。它们为开发者提供了一种有效的方式来组织代码、提高代码的可复用性、可维护性和灵活性。在众多编程语言中,Go语言因其独特的特性,如并发支持和简洁的语法…...
【Uniapp-Vue3】常用的表单组件button和input
表单组件中最常用的就是button组件和input组件 一、button组件 常用属性: <template><button>普通按钮</button><button size"mini">小按钮</button><button type"primary">蓝色按钮</button><…...
深入理解非对称加密:用Java实现RSA加解密
目录 一、非对称加密算法概述 二、Java 中实现非对称加密 非对称加密(Asymmetric Encryption)是一种加密方式,其中使用一对密钥:公钥(Public Key)和私钥(Private Key)。这种加密算…...
钓鱼邮件 wp
背景:Bob收到了一份钓鱼邮件,请找出木马的回连地址和端口。 1.打开文件 2.发现base64编码 3.base64解码 将base64编码全部存储在文件 base64.txt 中。 使用命令cat base6.txt | base64 -d | less解码并查看。 关键字: PK 知识点:…...