我只想检查我的远程 openVpn 服务器是否正在运行。就是这样。我该怎么做?使用“top”或“ps aux”会更安全,但也许我可以以某种方式 ping 它,也就是说,无需先通过 ssh 连接/进行身份验证?
答案1
如果你想知道主持人处于活动状态,您可以只查看ping
其 IP 或主机名。确保防火墙对传入ICMP 回显无论您尝试 ping 它的地方,数据包都是如此。
但是,如果您想知道它openvpn
是否正在运行,则必须连接到主机。OpenVPN 默认在端口 1194 上使用 UDP,因此您必须向该端口发送 UDP 数据包。
如果openvpn
是运行它将接受该数据包并将其丢弃(因为它不是有效的 OpenVPN 握手)。netcat
例如,您可以使用它进行测试,并检查返回代码($?
- 0=成功,1=错误):
~ $ echo "abcd" | netcat -u -v -w2 192.168.130.1 1194
Connection to 192.168.130.1 1194 port [udp/openvpn] succeeded!
~ $ echo $?
0
~ $
另一方面,如果openvpn
服务没有运行,主机应该返回ICMP udp 端口 1194 无法访问立即退出的数据包netcat
:
~ $ echo "abcd" | netcat -u -v 192.168.130.54 1194
~ $ echo $?
1
~ $
请注意,netcat
即使主机向下因为使用 UDP 时,它无法区分主机关闭和 openvpn 接收并丢弃数据包。在这两种情况下,它都不会收到任何响应。只有当主机启动而 openvpn 关闭时,它才会收到 ICMP 端口不可达响应并以 1 退出。这意味着您必须先运行ping -n -c2 ...
以验证主机是否确实启动。
希望有帮助:)
答案2
这是一个比较老的问题,但我想补充一点,netcat
您可以使用hping3
或nping
(此工具通常随附nmap
)以类似的方式检查 UDP 端口。这些工具具有更详细的输出并提供更多数据。
例如使用以下命令检查关闭的 UDP hping3
:
$ sudo hping3 --udp -p 26010 router.local
HPING router.local (eth0 192.168.1.1): udp mode set, 28 headers + 0 data bytes
ICMP Port Unreachable from ip=192.168.1.1 name=router.local
ICMP Port Unreachable from ip=192.168.1.1 name=router.local
^C
--- router.local hping statistic ---
2 packets tramitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
或通过nping
:
$ sudo nping -c 2 --udp -p 26010 router.local
Starting Nping 0.7.80 ( https://nmap.org/nping ) at 2020-09-19 20:57 EEST
SENT (0.0173s) UDP 192.168.1.40:53 > 192.168.1.1:26010 ttl=64 id=16061 iplen=28
RCVD (0.0177s) ICMP [192.168.1.1 > 192.168.1.40 Port unreachable (type=3/code=3) ] IP [ttl=64 id=4711 iplen=56 ]
SENT (1.0181s) UDP 192.168.1.40:53 > 192.168.1.1:26010 ttl=64 id=16061 iplen=28
RCVD (1.0185s) ICMP [192.168.1.1 > 192.168.1.40 Port unreachable (type=3/code=3) ] IP [ttl=64 id=4794 iplen=56 ]
Max rtt: 0.418ms | Min rtt: 0.343ms | Avg rtt: 0.380ms
Raw packets sent: 2 (56B) | Rcvd: 2 (112B) | Lost: 0 (0.00%)
Nping done: 1 IP address pinged in 1.03 seconds
将数据发送到已关闭的 UDP 端口(如果该端口未被防火墙过滤)会生成 ICMP 消息icmp_type
3
(目标无法访问),这在上面的示例中应该可见。客户端的操作系统处理此消息并向尝试将数据发送到该端口的应用程序返回错误。同时,操作系统也可能在其他情况下报告错误,例如,因为过滤防火墙拒绝到某些位置的流量并生成Host administratively prohibited
或其他 icmp 消息。因此通过hping3
或检查nping
应该更可靠。
同时如果端口开放(或者被防火墙过滤),则不会有响应:
$ sudo nping -c 2 --udp -p 1194 router.local
Starting Nping 0.7.80 ( https://nmap.org/nping ) at 2020-09-19 20:58 EEST
SENT (0.0265s) UDP 192.168.1.40:53 > 192.168.1.1:1194 ttl=64 id=54477 iplen=28
SENT (1.0268s) UDP 192.168.1.40:53 > 192.168.1.1:1194 ttl=64 id=54477 iplen=28
Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A
Raw packets sent: 2 (56B) | Rcvd: 0 (0B) | Lost: 2 (100.00%)
Nping done: 1 IP address pinged in 2.04 seconds
$ sudo hping3 --udp -p 1194 router.local # or via hping3
HPING router.local (eth0 192.168.1.1): udp mode set, 28 headers + 0 data bytes
^C
--- router.local hping statistic ---
2 packets tramitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
此外,由于hping3
和都nping
直接处理有关无法到达目的地的 icmp 消息,因此它们需要 root 权限。尽管,nping
可以在没有 root 权限的情况下 ping UDP,但在这种情况下输出将不太详细(因为它将报告操作系统返回的错误)。
此外,tcpdump
如果您怀疑连接过程中存在某种问题,您可以使用,例如使用sudo tcpdump -i any -n "host 192.168.1.1 && (udp port 1194 || icmp)"
。