我需要在服务器 A 和 B 之间设置站点到站点 VPN,其中服务器 A 由我管理,服务器 B 由客户端管理。服务器 A 运行的是 Ubuntu 20.04,我正在使用 strongswan 在我的终端设置 VPN。我正在使用 UFW 来管理服务器 A 的防火墙。
A 的公网 IP 地址:16.XX.XXX.17
B 的公网 IP 地址:14.XXX.XXX.94
现在,在对设置 VPN 并打开它进行必要的配置更改后,我能够看到以下日志/var/log/syslog
Mar 21 13:58:47 worker0 charon: 01[ENC] parsed IKE_AUTH response 1 [ IDr AUTH N(ESP_TFC_PAD_N) SA TSi TSr ]
Mar 21 13:58:47 worker0 charon: 01[IKE] authentication of '14.XXX.XXX.94' with pre-shared key successful
Mar 21 13:58:47 worker0 charon: 01[IKE] IKE_SA s-to-s[1] established between 16.XX.XXX.17[16.XX.XXX.17]...14.XXX.XXX.94[14.XXX.XXX.94]
Mar 21 13:58:47 worker0 charon: 01[IKE] scheduling reauthentication in 2644s
Mar 21 13:58:47 worker0 charon: 01[IKE] maximum IKE_SA lifetime 3184s
Mar 21 13:58:47 worker0 charon: 01[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
Mar 21 13:58:47 worker0 charon: 01[CFG] selected proposal: ESP:AES_CBC_256/HMAC_SHA2_256_128/NO_EXT_SEQ
Mar 21 13:58:47 worker0 charon: 01[IKE] CHILD_SA s-to-s{1} established with SPIs c97fea32_i f60175ca_o and TS 10.132.86.142/32 === 10.128.28.96/27
Mar 21 13:58:53 worker0 charon: 14[NET] received packet: from 14.XXX.XXX.94[4500] to 16.XX.XXX.17[4500] (80 bytes)
Mar 21 13:58:53 worker0 charon: 14[ENC] parsed INFORMATIONAL request 0 [ ]
Mar 21 13:58:53 worker0 charon: 14[ENC] generating INFORMATIONAL response 0 [ ]
Mar 21 13:58:53 worker0 charon: 14[NET] sending packet: from 16.XX.XXX.17[4500] to 14.XXX.XXX.94[4500] (80 bytes)
Mar 21 13:58:58 worker0 charon: 07[NET] received packet: from 14.XXX.XXX.94[4500] to 16.XX.XXX.17[4500] (80 bytes)
Mar 21 13:58:58 worker0 charon: 07[ENC] parsed INFORMATIONAL request 1 [ ]
Mar 21 13:58:58 worker0 charon: 07[ENC] generating INFORMATIONAL response 1 [ ]
Mar 21 13:58:58 worker0 charon: 07[NET] sending packet: from 16.XX.XXX.17[4500] to 14.XXX.XXX.94[4500] (80 bytes)
Mar 21 13:59:03 worker0 charon: 05[NET] received packet: from 14.XXX.XXX.94[4500] to 16.XX.XXX.17[4500] (80 bytes)
输出ipsec status
:
Security Associations (1 up, 0 connecting):
s-to-s[1]: ESTABLISHED 5 minutes ago, 16.XX.XXX.17[16.XX.XXX.17]...14.XXX.XXX.94[14.XXX.XXX.94]
s-to-s{1}: INSTALLED, TUNNEL, reqid 1, ESP SPIs: c97fea32_i f60175ca_o
s-to-s{1}: 10.132.86.142/32 === 10.128.28.96/27
这ufw status
Status: active
To Action From
-- ------ ----
666 LIMIT Anywhere # For ssh
62626 ALLOW Anywhere # For wireguard
Anywhere on pv0 ALLOW Anywhere
666 (v6) LIMIT Anywhere (v6) # For ssh
62626 (v6) ALLOW Anywhere (v6) # For wireguard
Anywhere (v6) on pv0 ALLOW Anywhere (v6)
如果我未打开4500 端口,服务器如何能够接收/var/log/syslog
该端口上的数据包(根据 ipsec 登录)?我这里遗漏了什么?
我根本没有直接接触过 IP 表。我已经通过在 8000 端口上运行一个简单的 http 服务器(使用python3 -m http.server
)来验证,我无法从服务器外部访问其他未打开的端口)
答案1
根据日志,主机充当客户端,而不是服务器。也就是说,它正在启动 IKE_SA 并发送第一条消息。默认情况下,通常不会阻止出站连接。使用 检查主机上的默认策略ufw status verbose
。
答案2
ufw
不是系统中存在的唯一防火墙模块,它仅控制全局 iptables/nftables 链中的自己的链INPUT
。您可以通过在服务器 A 上运行来验证是否安装了所需的规则,您应该会看到在某个可从 访问的 UDP:4500 上iptables -S
有一些规则。ACCEPT
INPUT
或者,存在多个路由/过滤表,虽然ufw
在“通用”表(IIRC 索引 254)上运行,但 VPN 系统通常会分配一个编号较小的表(200 似乎是常见的选择),并设置受 VPN 控制的流量由该表路由/过滤。通过运行 进行验证nft list tables
,然后您可以通过运行 检查表nft list ruleset table (table)
。请查看手册页以了解确切的语法。