转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
目录
场景定义
配置步骤
1. 确认网络接口名称
2. 配置静态 IP 地址
3. 验证连接
主机间速率测试
场景定义
有两台主机通过网线与交换机相连。主机操作系统是“ubuntu”,主机A连接交换机的网卡接口是“ens1f1、ens1f0”,主机B连接交换机的网卡接口是“ens2f1、ens2f0”。交换机没有额外的连接(如没有接入互联网),它仅与两台主机有网线连接。基于以上信息,如何配置使得两台主机能通过交换机进行通信?
配置步骤
1. 确认网络接口名称
在每台主机上,使用以下命令查看可用的网络接口:
ip link show | grep ens*f*
这将列出所有网络接口。例如,可能会看到类似 ens1f0
和 ens1f1
的接口名称。
可以通过以下指令来详细查看网口信息和类型:
需先安装nmcli:
# Debian/Ubuntu 系统 sudo apt install network-manager network-manager-gnome # CentOS 7 系统 sudo yum install NetworkManager # CentOS/RHEL 系统 sudo yum install NetworkManager
还需要启动NetworkManager服务:
sudo systemctl start NetworkManager
nmcli device status # 查看网络设备状态
DEVICE
:网络接口的名称。
TYPE
:网络接口的类型(如以太网、桥接、隧道、环回)。
STATE
:网络接口的当前状态(如已连接、未管理)。
CONNECTION
:与该设备关联的连接配置名称。
eno1:以太网接口,已连接,使用
Wired connection 1
。docker0:桥接设备,已连接,用于 Docker 容器网络。
eno2:以太网接口,已连接,使用
Wired connection 2
。ens1f0:以太网接口,已连接,使用
netplan-ens1f0
。ztk4jieaxm 和 ztklhzrkoh:隧道接口(如 VPN 或其他隧道协议),已连接。
ens1f1:以太网接口,已连接,使用
Wired connection 5
。veth3001267:虚拟以太网接口,未管理(通常用于容器网络)。
lo:环回接口(本地回环),未管理。
注意:
- 如果STATE显示connected,那就没问题,表示该网口已连接并且已启用。
- 如果STATE显示unavailable,可以通过"ip link show"来查看状态。如果是网口没启用(显示DOWN),可以通过"sudo ip link set ens1f0 up"来启用。注意改ens1f0为你的。
- 如果STATE显示
unmanaged
,可能该网卡可能被系统配置为不被 NetworkManager 管理,可以使用"sudo nmcli device set ens1f0 managed yes"来手动设置网卡为managed。
注意改ens1f0为你的。不过在设置前需要特别注意,检查这个网卡是不是有其他用处!
nmcli c show # 网络连接配置
NAME
:连接配置的名称。
UUID
:连接配置的唯一标识符。
TYPE
:连接类型(如以太网、桥接、隧道)。
DEVICE
:当前使用的网络接口(如果没有绑定设备,则显示--
)。
Wired connection 1:以太网连接,绑定到
eno1
。Wired connection 2:以太网连接,绑定到
eno2
。docker0:桥接连接,绑定到
docker0
。netplan-ens1f0:以太网连接,绑定到
ens1f0
。ztk4jieaxm 和 ztklhzrkoh:隧道连接,绑定到对应的隧道接口。
Wired connection 5:以太网连接,绑定到
ens1f1
。Wired connection 3 和 Wired connection 4:以太网连接,但未绑定到任何设备(可能是未使用的配置)。
通过以上检测,就可以看出:
物理以太网接口:
eno1
、eno2
、ens1f0
、ens1f1
是物理以太网接口,分别绑定到不同的连接配置。虚拟网络设备:
docker0
是 Docker 的桥接设备,用于容器网络。
ztk4jieaxm
和ztklhzrkoh
是隧道接口(如 VPN)。
veth3001267
是虚拟以太网接口(通常用于容器)。环回接口:
lo
是本地回环接口,未管理。未使用的连接配置:
Wired connection 3
和Wired connection 4
是未绑定设备的以太网连接配置。这表明系统中有多个物理和虚拟网络接口,配置了多种网络连接(包括以太网、桥接、隧道等)。
更进一步地,要查看特定连接配置的详细信息,可以用:
nmcli connection show 'Wired connection 4'
要查看特定网卡的详细信息,可以用:
nmcli device show ens1f0
更多说明:
- 更多网口配置相关的内容,可以参考这篇博客:【linux】配置网口IP|RDMA配置IP|ens、eno、enp网口的区别|ping不通问题排查|DNS设置
- nmcli、nmtui创建的配置文件在:/etc/NetworkManager/system-connections/
- nmcli的常用命令:
步骤 命令 说明 查看网络连接 nmcli connection show
显示当前所有网络连接 配置静态IP地址 nmcli connection modify "Wired connection 1" ipv4.addresses "192.168.1.100/24" ipv4.gateway "192.168.1.1" ipv4.dns "8.8.8.8 8.8.4.4" ipv4.method manual
设置IP地址、网关和DNS 激活网络连接 nmcli connection up "Wired connection 1"
激活网络连接 检查连接状态 nmcli device status
查看设备连接状态 查看IP配置 nmcli device show eth0
显示设备的IP配置信息 测试网络连通性 ping -c 4 192.168.1.1
测试与网关的连通性 查看路由表 ip route
显示当前路由表 检查DNS解析 nslookup google.com
测试DNS解析是否正常 修改默认网关 nmcli connection modify "Wired connection 1" ipv4.gateway "192.168.1.1"
如果默认网关配置错误,可以通过该命令修改
以上步骤是为了更好的了解现有的连接配置和网卡信息。
2. 确定主机连接同一交换机
要确定两台未配置IP地址且无法访问交换机的服务器是否连接至同一台交换机,可以利用LLDP/CDP协议。LLDP(Link Layer Discovery Protocol)是一种网络发现协议,如果交换机支持 LLDP,并且服务器网卡的驱动支持 LLDP,可以使用 lldpd
来发现交换机信息。
安装LLDP工具:
-
在两台服务器上安装
lldpad
:
apt install lldpd # Debian/Ubuntu
yum install lldpd # CentOS/RHEL
- 启动服务并启用LLDP(注意ens1f0可能不一样):
sudo systemctl start lldpad
查询交换机信息:
- 在两台主机上,使用
lldpctl
查看交换机信息
sudo lldpctl
lldpctl
输出解释:接口信息
Interface: ens1f1, via: LLDP, RID: 1, Time: 0 day, 00:00:01
- Interface: ens1f1 → 主机上的物理网卡
ens1f1
。- via: LLDP → 该信息是通过 LLDP 协议获取的。
- RID: 1 → 这个是 LLDP 记录的唯一标识符(Record ID),一般用于内部索引。
- Time: 0 day, 00:00:01 → 这是 LLDP 信息的存活时间,表示此信息在 1 秒前收到(通常 LLDP 信息会定期更新)。
交换机(Chassis)信息
Chassis: ChassisID: mac 1c:34:da:a8:b5:40 SysName: switch-a48bbc SysDescr: MSN2100,Onyx,SWv3.9.0300 Capability: Bridge, on Capability: Router, off
- ChassisID: mac 1c:34:da:a8:b5:40 → 这是交换机的 MAC 地址,
1c:34:da:a8:b5:40
。- SysName: switch-a48bbc → 交换机的主机名(名称),在网络管理中通常用于识别设备。
- SysDescr: MSN2100, Onyx, SWv3.9.0300 → 交换机的型号和操作系统版本:
- MSN2100 → 交换机型号(Mellanox SN2100)。
- Onyx → Mellanox Onyx 操作系统。
- SWv3.9.0300 → 交换机的固件/软件版本 3.9.0300。
- Capability: Bridge, on → 交换机具备 二层交换(Bridge)功能,并且已启用。
- Capability: Router, off → 交换机具备 三层路由(Router)功能,但未启用。
端口(Port)信息
Port: PortID: ifname Eth1/1 PortDescr: TTL: 120
- PortID: ifname Eth1/1 → 主机
ens1f1
连接到了交换机的 Eth1/1 端口。- PortDescr: → 端口描述,交换机端口的备注信息(这里没有填写)。
- TTL: 120 → LLDP 信息的生存时间(Time To Live),单位为秒,意味着如果 120 秒内没有更新,这条 LLDP 记录将被删除。
对比方法:
SysName
(交换机名称)是否相同?ChassisID
(MAC 地址)是否相同?- 交换机端口
PortID
是否不同?
- 如果是不同的
EthX/X
端口,则说明两台服务器连接到了同一台交换机的不同端口。- 如果
PortID
完全相同,那可能是一个 LAG/LACP 端口组,或者是错误配置。
找到主机上ChassisID相同的网口,表示他们连接的是同一个交换机。注意,如果不是连接的同一个交换机,那么后续的配置即使完成了,主机之间也是无法通信的。
3. 配置静态 IP 地址
先查看那些网段被占用了:
ifconfig
先安装nmtui,后面要用到:
# Debian/Ubuntu 系统 sudo apt install network-manager network-manager-gnome # CentOS 7 系统 sudo yum install NetworkManager-tui # CentOS/RHEL 系统 sudo yum install nm-connection-editor
假设选择在每台主机上使用 ens1f0
接口进行通信,按照以下步骤配置静态 IP 地址:
主机 A:
打开终端,输入以下命令:
sudo nmtui
按以下步骤执行:
修正说明:修改后,上图中要“手动Deactivate、再Activate一下”,不然可能不会生效。
如果要用nmcli进行设置,参考命令:
nmcli connection modify "Wired connection 4" ipv4.addresses "192.168.3.10/24" ipv4.method manual
激活该配置:
nmcli connection up "Wired connection 4"
然后就可以看到设置完成了:
主机 B:
与主机A的操作一样,只是在设置ip时候,注意不要用一样的。比如主机A是192.168.3.10/24,那么主机B可以设置为192.168.3.11/24。
4. 验证连接
先清空arp表:
sudo ip -s -s neigh flush all
在完成上述配置后,您可以通过 ping
命令测试两台主机之间的连接:
-
在主机 A 上,输入:
ping 192.168.3.11
-
在主机 B 上,输入:
ping 192.168.3.10
如果配置正确,您将看到来自对方主机的响应,表示两台主机已经通过交换机成功建立通信。
注意,如果你的交换机不支持或者关闭了router,那需要通过arp方式:
sudo apt install arping
sudo arping 192.168.3.11
主机间速率测试
这里测试一下这两台主机之间的通信速率。
1、首先在两台主机上安装 iperf
# Debian/Ubuntu 系统
sudo apt install iperf
# CentOS/RHEL 系统
sudo yum install iperf
2、在主机A上启动一个 iperf
服务器,监听端口 5001
:
iperf -s -p 5001
3、在主机B上运行 iperf 客户端
iperf -c 192.168.3.11 -p 5001 -t 10
-c
:指定服务器的 IP 地址。
-p
:指定服务器的端口号。
-t
:指定测试时间(单位:秒)。
在主机 B 上,iperf
会显示测试结果,包括带宽、延迟等信息。
无法通信的可能情况
1、ip冲突
可能你设置的静态ip与其他服务的ip冲突了。通过以下指令来查看arp表:
arp -a
可以看到192.168.3.x的网段已经被用了。因此在配置静态IP时候,可以选择其他网段,如192.168.4.x。