如何测试两台Linux主机间特定UDP端口的网络连通性
验证Linux主机间514端口连通性的实用方法
针对你遇到的服务器A向B的514端口发送syslog事件但B收不到的问题,结合你已经确认的前提(A正常发送、B端口开放),我整理了几个工具和方法来验证中间防火墙是否阻断了该端口的流量:
1. 用 telnet 快速验证TCP端口(适用于TCP Syslog)
telnet是最基础的端口连通性测试工具,但它默认只支持TCP协议——如果你的syslog配置用的是TCP模式,在服务器A上执行:
telnet <服务器B的IP> 514
- 如果连接成功,会返回类似
Connected to xxx.xxx.xxx.xxx的提示,说明TCP 514端口连通正常; - 如果出现
Connection timed out或Connection refused,大概率是中间防火墙阻断了TCP流量。
注意:默认syslog用的是UDP协议,这种情况下telnet没法测试,得用下面的Netcat工具。
2. 用 nc(Netcat)测试TCP/UDP端口(强烈推荐)
Netcat是功能更灵活的网络工具,同时支持TCP和UDP,完美适配syslog的两种协议场景:
测试UDP 514端口(对应默认Syslog)
- 先在服务器B上启动Netcat监听UDP 514端口:
(nc -ul 514-u指定UDP模式,-l表示监听) - 回到服务器A,发送一条测试消息到B的UDP 514端口:
echo "Test Syslog Message from Server A" | nc -u <服务器B的IP> 514
- 如果服务器B的Netcat终端能收到这条测试消息,说明UDP 514端口完全连通;
- 如果B端没有任何输出,那基本可以确定中间防火墙阻断了UDP 514的流量。
测试TCP 514端口
- 服务器B上启动TCP监听:
nc -l 514 - 服务器A发送测试数据:
echo "Test TCP Syslog from Server A" | nc <服务器B的IP> 514
- 同样,B端收到消息则连通正常,收不到则存在阻断。
3. 用 nmap 扫描端口状态
nmap可以帮你快速判断目标端口的可达性,记得要指定协议类型:
扫描UDP 514端口
在服务器A上执行(需要root权限,所以加sudo):
sudo nmap -sU -p 514 <服务器B的IP>
(-sU 表示UDP扫描,-p 指定要扫描的端口)
- 结果中如果显示
514/udp open,说明端口可达; - 如果显示
514/udp filtered,则表示防火墙阻断了UDP 514的流量。
扫描TCP 514端口
nmap -p 514 <服务器B的IP>
- 结果显示
514/tcp open则正常,filtered或closed则存在阻断。
4. 抓包排查(用 tcpdump)
如果上面的工具还没法定位问题,抓包可以直接看到流量的走向:
在服务器A上抓包(验证流量是否发出)
sudo tcpdump -i any port 514 and host <服务器B的IP>
触发服务器A发送syslog事件,看终端是否捕获到对应的数据包。如果有,说明A确实把流量发出去了;如果没有,可能是A的syslog配置有问题(不过你已经确认A在发送,这个概率较低)。
在服务器B上抓包(验证流量是否到达)
sudo tcpdump -i any port 514 and host <服务器A的IP>
- 如果A端能抓到包,但B端抓不到,那100%是中间防火墙或路由设备阻断了流量;
- 如果B端能抓到包,但syslog服务没处理,那可能是B的syslog配置问题(比如没监听对应端口)。
5. 用 traceroute 追踪UDP流量路径
traceroute可以帮你定位流量在哪个节点被阻断,针对UDP 514端口:
traceroute -U -p 514 <服务器B的IP>
(-U 指定UDP协议,-p 指定端口)
如果某一跳之后没有响应,那这个节点大概率就是阻断流量的防火墙所在位置。
内容的提问来源于stack exchange,提问作者Anh




