适用于 Linux 的 NordVPN 应用程序具有端口和子网白名单功能。它是通过以下命令启用的(对于我的端口和子网):
nordvpn whitelist add subnet 192.168.1.0/24
nordvpn whitelist add port 22
但是,当该设备连接到 VPN 时,我无法从子网中的另一台设备通过 SSH 访问它。我写信给 NordVPN 支持,他们回复了:
目前,我们的 Linux NordVPN 应用程序在端口和子网白名单方面遇到一些问题。
他们没有提供任何有用的建议。我看了一下iptables规则。它们对我来说似乎没问题,但是当我刷新所有规则(在连接到 VPN 时)时,我就能够从我的其他本地设备与该设备建立 SSH 连接。这表明规则未正常运行。
NordVPN 的规则是:
# Generated by iptables-save v1.8.4 on Sun Apr 12 16:11:29 2020
*filter
:INPUT DROP [86:19526]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [103:7935]
-A INPUT -i nordlynx -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 89.87.71.71/32 -i lo -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.0/8 -i lo -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 89.87.71.71/32 -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 89.87.71.71/32 -i nordlynx -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 10.5.0.0/16 -i nordlynx -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.0/8 -i lo -p udp -m udp --dport 22 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -i lo -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -i lo -p udp -m udp --dport 6568 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -i lo -p tcp -m tcp --dport 6568 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -i lo -p udp -m udp --dport 7070 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -i lo -p tcp -m tcp --dport 7070 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -i lo -p udp -m udp --dport 51820 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i lo -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i eth0 -p udp -m udp --dport 22 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i eth0 -p udp -m udp --dport 6568 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i eth0 -p tcp -m tcp --dport 6568 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i eth0 -p udp -m udp --dport 7070 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i eth0 -p tcp -m tcp --dport 7070 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i eth0 -p udp -m udp --dport 51820 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i eth0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -d 103.86.99.99/32 -o lo -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -d 103.86.96.96/32 -o lo -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -d 103.86.99.99/32 -o nordlynx -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -d 103.86.96.96/32 -o nordlynx -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -o nordlynx -j ACCEPT
-A OUTPUT -d 89.87.71.71/32 -o lo -j ACCEPT
-A OUTPUT -d 127.0.0.0/8 -o lo -j ACCEPT
-A OUTPUT -d 89.87.71.71/32 -o eth0 -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -o eth0 -j ACCEPT
-A OUTPUT -d 89.87.71.71/32 -o nordlynx -j ACCEPT
-A OUTPUT -d 10.5.0.0/16 -o nordlynx -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -o lo -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -o eth0 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Sun Apr 12 16:11:29 2020
我用以下方法冲洗它们:
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
当规则被刷新时,我的 SSH 连接按预期工作。 (我通过重新启动 NordVPN 来恢复它的规则。)需要对上述规则进行哪些更改才能使该设备接受来自 LAN 的传入 SSH 连接(端口 22)?
针对评论添加的信息:
# ip -br address
lo UNKNOWN 127.0.0.1/8
eth0 UP 192.168.1.3/24
nordlynx UNKNOWN 10.5.0.2/16
# ip rule
0: from all lookup local
32764: from all lookup main suppress_prefixlength 0
32765: not from all fwmark 0xca6c lookup 51820
32766: from all lookup main
32767: from all lookup default
# ip route
default via 192.168.1.1 dev eth0 proto dhcp metric 20100
10.5.0.0/16 dev nordlynx proto kernel scope link src 10.5.0.2
192.168.1.0/24 via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.3 metric 100
ip route show table 51820
default dev nordlynx scope link
我正在使用 NordVPN 的wireguard 技术(nordlynx)。但当使用 openvpn 技术而不是wireguard 时,问题就存在。我测试了两种方式。
答案1
我也遇到了类似的问题,尝试一下白名单192.168.0.0/16
代替192.168.1.0/24
。这在 3.8.10 版本上对我有用。
NordVPN 支持部门的 David 让我尝试一下,以防万一,结果很有效。他说他无法解释为什么,因为理论上/24
应该有效,但既然它现在对我有效,我不能抱怨太多。
另外,我能够从白名单中删除端口 22,而不会破坏 SSH。