我有一个 OpenVPN 服务器和两个客户端,
我可以互相 ping 客户端,但当我这样做时,使用 tcpdump 在服务器上看不到任何数据包
服务器
正在 192.168.0.1 上运行
我尝试使用以下方式捕获流量tcpdump -i tun0 icmp --immediate-mode -l -n
客户
正在 192.168.0.2 上运行
并且我可以 ping 客户端2,ping 192.168.0.3
结果正常:
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=128 time=32.4 ms
TCP 转储
但是我从 tcpdump 中看不到任何东西:
0 packets captured
0 packets received by filter
0 packets dropped by kernel
虽然如果我直接 ping openvpn 服务器ping 192.168.0.1
,我可以看到在那里捕获的数据包:
18:05:04.022747 IP 192.168.0.2 > 192.168.0.1: ICMP echo request, id 5, seq 5, length 64
18:05:04.022801 IP 192.168.0.1 > 192.168.0.2: ICMP echo reply, id 5, seq 5, length 64
如何在服务器上捕获客户端间的通信数据包?
答案1
如果您使用client-to-client
选项,则无法使用 tcpdump 查看它。在这种情况下,OpenVPN 不会将任何流量转发到内核。它接收数据包、处理它并发送到另一个客户端,但由于它不是发往服务器系统也不通过它路由,因此无需将其发送到设备tun
。
您可以使用管理控制台和高详细程度(6)查看流量是否在 OpenVPN 内部:
在服务器配置文件中:
...
management localhost 7505
...
使用:
$ telnet localhost 7505
...
>INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info
log on
SUCCESS: real-time log notification set to ON
verb 6
SUCCESS: verb level changed
>LOG:1612639797,D,XXXX/XXX.XXX.XXX.XXX:XXXXX UDPv4 READ [XXX] from [AF_INET]XXX.XXX.XXX.XXX:XXXXX (via [AF_INET]XXX.XXX.XXX.XXX%XXX): P_DATA_V2 kid=2 DATA len=XXX
>LOG:1612639797,D,XXXX/XXX.XXX.XXX.XXX:XXXXX TUN WRITE [XXX]
>LOG:1612639797,D,XXXX/XXX.XXX.XXX.XXX:XXXXX TUN READ [XXX]
>LOG:1612639797,D,XXXX/XXX.XXX.XXX.XXX:XXXXX UDPv4 WRITE [XXX] to [AF_INET]XXX.XXX.XXX.XXX:XXXXX (via [AF_INET]XXX.XXX.XXX.XXX%XXX): P_DATA_V2 kid=2 DATA len=XXX
...
log off
SUCCESS: real-time log notification set to OFF
verb 3
SUCCESS: verb level changed
exit
$
(在这种情况下,我不得不盲目地写下“注销”,因为输出完全被实时日志干扰了。我在繁忙的服务器上这样做过。但无论如何它都有效。)
请参阅man openvpn
详情。请注意,如果使用,所有内容也会到达服务器日志文件,并且对于大量流量,日志将非常大。据我所知,您甚至可以将其设置为以十六进制形式记录数据包数据。