Linux机器之间排查网络连通问题
网络连通性排查步骤(基于五层模型)
以下按照网络五层架构,从底层到高层逐层排查,并分别列出Ubuntu和CentOS对应的命令。
1. 物理层
排查点:网线、网卡状态、物理连接。
命令(通用):
# 查看网卡状态(确认网卡是否启用)
ip link show# 查看详细网卡信息(如驱动、速度等)
ethtool <网卡名> # 例如 ethtool eth0# 启用/禁用网卡(临时生效)
sudo ip link set <网卡名> up/down
2. 数据链路层
排查点:MAC地址、交换机/VLAN配置、ARP解析。
命令(通用):
# 查看ARP表(确认目标IP的MAC地址解析)
ip neigh show # 或 arp -n# 抓取ARP包(检查是否有请求/响应)
sudo tcpdump -i <网卡名> arp -n
3. 网络层
排查点:IP地址、子网掩码、路由表、防火墙。
3.1 检查IP配置
命令(通用):
ip addr show # 或 ifconfig(需安装 net-tools)
注:对照机器之间的子网掩码是否一致,广播地址是否一致,IP地址是否在同一个网段内
3.2 检查路由表
命令(通用):
ip route show # 或 route -n
3.3 测试连通性
ping <目标IP> # 测试ICMP连通性
3.4 检查防火墙规则
Ubuntu:
# 若使用 ufw:
sudo ufw status # 查看防火墙状态
sudo ufw disable # 临时关闭防火墙(慎用)
sudo ufw allow <端口号>/tcp # 放行端口号
sudo ufw enable # 启用防火墙# 直接检查iptables:
sudo iptables -L -nv # 查看IPv4规则
sudo ip6tables -L -nv # 查看IPv6规则
CentOS:
# 若使用 firewalld:
sudo firewall-cmd --state # 查看状态
sudo firewall-cmd --list-all # 查看所有规则# 直接检查iptables/nftables:
sudo iptables -L -nv # 传统 iptables
sudo nft list ruleset # 若使用 nftables
3.5 重点总结
- 在Ubuntu中,ufw命令是iptables的简化版命令,通过
sudo ufw allow <端口号> /tcp
因为没有永久保存到系统中,有时还不能生效。iptables与ufw的命令差别,可以参考这个文章:Iptables与ufw两个命令之间的区别 - 需要通过下面更详细脚本来执行
注:# 添加防火墙的编辑权限 sudo chattr -i /etc/iptables/rules.v4 # 添加端口号和类型tcp到防火墙中 协议为tcp或udp, 8101 sudo iptables -A IN_work -p <协议> -m <协议> --dport <端口号> -j ACCEPT # 保存当前使用到系统中 sudo netfilter-persistent save > /dev/null 2>&1 # 查找/work/trusted,保存到麒麟银河的防火墙配置中[现用的系统] sudo sed -i 's/work/trusted/g' /etc/kylin-firewall/kylin-firewall.conf # 去除防火墙的编辑权限 sudo chattr +i /etc/iptables/rules.v4
1. chattr的命令参考此文章:chattr命令
2. iptables命令参考此文章:iptables命令
3. netfilter-persistent命令参考此文章:netfilter-persistent命令
4. 传输层
排查点:端口监听状态、端口连通性、防火墙规则。
4.1 检查本地端口监听
命令(通用):
ss -tuln | grep <端口号> # 推荐使用 ss
# 或
netstat -tuln | grep <端口号> # 需安装 net-tools
4.2 测试远程端口连通性
# 使用 telnet(需安装 telnet)
telnet <目标IP> <端口># 使用 nc(需安装 nmap-ncat/nc)
nc -zv <目标IP> <端口># 使用curl来测试连通
curl http://<目标IP>:<端口号>/api/test
4.3 检查防火墙对端口的放行
参考 3.4 的防火墙命令,确保目标端口已放行。
5. 应用层
排查点:服务配置、应用日志、协议兼容性。
5.1 检查服务状态
Ubuntu/CentOS(通用):
systemctl status <服务名> # 如 nginx、ssh
5.2 查看应用日志
Ubuntu:
journalctl -u <服务名> # 查看 systemd 管理的服务日志
# 或直接查看日志文件(如 /var/log/nginx/error.log)
CentOS:
journalctl -u <服务名> # 同 Ubuntu
# 或查看 /var/log/messages、/var/log/syslog 等
5.3 使用应用层工具测试
curl -v http://<目标IP>:<端口> # 测试HTTP服务
ssh -v user@<目标IP> # 测试SSH服务(-v 显示详细日志)
分系统差异总结
操作 | Ubuntu | CentOS |
---|---|---|
安装工具 | sudo apt install <包名> | sudo yum install <包名> |
服务管理 | systemctl start/stop <服务> | systemctl start/stop <服务> |
防火墙管理 | ufw 或 iptables | firewalld 或 iptables |
网络配置文件 | /etc/netplan/*.yaml | /etc/sysconfig/network-scripts/ifcfg-* |
排查思路总结
- 从底层到高层:先确认物理连接和链路层正常,再逐步排查网络层、传输层和应用层。
- 双向检查:确保两端机器的配置均正确(如IP、路由、防火墙)。
- 抓包分析:使用
tcpdump
或Wireshark
抓包分析具体网络交互。 - 日志分析:结合系统日志(
/var/log/syslog
、journalctl
)和应用日志定位问题。
注:含有AI生成内容,加上自己的总结。