我们开发业务的一位客户提供了对其 IPSec VPN 的访问权限,并提供了必要的凭证(匿名):
- 网关:example.fake
- 集团:MYGROUP
- 用户:MYUSER
- 密码:MYPASSWORD
- 相移键控: MYPSK
他们还提供了其端配置的参数:
阶段1
- 身份验证:SHA1
- 加密:AES 256
- SA 生活:1 小时
- 关键组:Diffie Helman 第 2 组
- NAT 遍历和 DPD 已启用
- 保活间隔:20秒
阶段2
- 类型:ESP
- 身份验证:SHA1
- 加密:AES 256
- 强制密钥过期:1 小时
连接类型是 IKEv1,并且他们仅在特定 IP 1.2.3.4 上配置了通过 VPN 隧道进行的访问,因为这是我们必须访问的唯一机器。
目标和尝试
我正在尝试弄清楚如何配置 StrongSwan 以连接到他们的 VPN。我需要它在装有 Ubuntu Server 16.04 的 VPS 上运行。
我尝试遵循了很多指南,但其中一些适用于旧版本的 StrongSwan,因此它们不起作用。最后,我/etc/ipsec.conf
使用以下尝试配置进行了编辑:
config setup
conn myconn
authby=xauthpsk
dpdaction=restart
esp=aes256-sha1
ike=aes256-sha1-dh2
ikelifetime=1h
keyexchange=ikev1
leftauth=psk
leftauth2=xauth
leftgroups=MYGROUP
leftid=@MYUSER
right=example.fake
rightsubnet=1.2.3.4/32
我创造了/etc/ipsec.secrets
:
: PSK "MYPSK"
MYUSER: XAUTH "MYPASSWORD"
期望的最终状态和错误消息
理想的最终状态是我们的机器连接到客户的 VPN,我们可以到达那个单一 IP 1.2.3.4。其余流量应该被拆分,而不是通过 VPN。
尽管myconn
在中定义了/etc/ipsec.conf
,但在尝试连接时仍会出现此错误消息:
# ipsec restart
Stopping strongSwan IPsec...
Starting strongSwan 5.3.5 IPsec [starter]...
# ipsec up myconn
no config named 'myconn'
日志文件
/var/log/syslog
运行后添加以下几行ipsec restart
:
Jun 5 16:45:01 server charon: 00[DMN] signal of type SIGINT received. Shutting down
Jun 5 16:45:03 server charon: 00[DMN] Starting IKE charon daemon (strongSwan 5.3.5, Linux 4.8.0-53-generic, x86_64)
Jun 5 16:45:03 server charon: 00[CFG] disabling load-tester plugin, not configured
Jun 5 16:45:03 server charon: 00[LIB] plugin 'load-tester': failed to load - load_tester_plugin_create returned NULL
Jun 5 16:45:03 server charon: 00[CFG] dnscert plugin is disabled
Jun 5 16:45:03 server charon: 00[CFG] ipseckey plugin is disabled
Jun 5 16:45:03 server charon: 00[CFG] attr-sql plugin: database URI not set
Jun 5 16:45:03 server charon: 00[CFG] loading ca certificates from '/etc/ipsec.d/cacerts'
Jun 5 16:45:03 server charon: 00[CFG] loading aa certificates from '/etc/ipsec.d/aacerts'
Jun 5 16:45:03 server charon: 00[CFG] loading ocsp signer certificates from '/etc/ipsec.d/ocspcerts'
Jun 5 16:45:03 server charon: 00[CFG] loading attribute certificates from '/etc/ipsec.d/acerts'
Jun 5 16:45:03 server charon: 00[CFG] loading crls from '/etc/ipsec.d/crls'
Jun 5 16:45:03 server charon: 00[CFG] loading secrets from '/etc/ipsec.secrets'
Jun 5 16:45:03 server charon: 00[CFG] loaded RSA private key from '/etc/ipsec.d/private/myKey.der'
Jun 5 16:45:03 server charon: 00[CFG] sql plugin: database URI not set
Jun 5 16:45:03 server charon: 00[CFG] opening triplet file /etc/ipsec.d/triplets.dat failed: No such file or directory
Jun 5 16:45:03 server charon: 00[CFG] eap-simaka-sql database URI missing
Jun 5 16:45:03 server charon: 00[CFG] loaded 0 RADIUS server configurations
Jun 5 16:45:03 server charon: 00[CFG] no threshold configured for systime-fix, disabled
Jun 5 16:45:03 server charon: 00[CFG] coupling file path unspecified
Jun 5 16:45:03 server charon: 00[LIB] loaded plugins: charon test-vectors unbound ldap pkcs11 aes rc2 sha1 sha2 md4 md5 rdrand random nonce x509 revocation constraints acert pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey dnscert ipseckey pem openssl gcrypt af-alg fips-prf gmp agent chapoly xcbc cmac hmac ctr ccm gcm ntru bliss curl soup mysql sqlite attr kernel-netlink resolve socket-default connmark farp stroke updown eap-identity eap-sim eap-sim-pcsc eap-aka eap-aka-3gpp2 eap-simaka-pseudonym eap-simaka-reauth eap-md5 eap-gtc eap-mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap eap-tnc xauth-generic xauth-eap xauth-pam xauth-noauth tnc-tnccs tnccs-20 tnccs-11 tnccs-dynamic dhcp whitelist lookip error-notify certexpire led radattr addrblock unity
Jun 5 16:45:03 server charon: 00[LIB] dropped capabilities, running as uid 0, gid 0
Jun 5 16:45:03 server charon: 00[JOB] spawning 16 worker threads
这些是在运行后添加的ipsec up myconn
:
Jun 5 16:45:21 server charon: 15[CFG] received stroke: initiate 'myconn'
Jun 5 16:45:21 server charon: 15[CFG] no config named 'myconn'
它们看起来与前面提到的错误信息一致。
问题
为什么ipsec up myconn
说没有这样的配置?这是我第一次尝试处理 IPSec VPN...我尝试编写的配置有意义吗?
我必须做哪些改变才能使其工作?
添加后更新auto=add
根据评论中的建议,我已将其添加auto=add
到我的配置中。我现在得到了这个:
# ipsec up myconn
initiating Main Mode IKE_SA myconn[1] to <IP of example.fake>
configuration uses unsupported authentication
tried to check-in and delete nonexisting IKE_SA
establishing connection 'myconn' failed
这些行附加到日志文件:
Jun 5 17:07:19 server charon: 12[CFG] received stroke: initiate 'myconn'
Jun 5 17:07:19 server charon: 14[IKE] initiating Main Mode IKE_SA myconn[2] to <IP of example.fake>
Jun 5 17:07:19 server charon: 14[CFG] configuration uses unsupported authentication
Jun 5 17:07:19 server charon: 14[MGR] tried to check-in and delete nonexisting IKE_SA
删除后更新esp=
,ike=
并且keyexchange=
删除上面提到的三行后,连接尝试如下,持续三次(代码片段仅显示第一次,其他的都相同):
Jun 5 17:18:44 server charon: 06[CFG] received stroke: initiate 'myconn'
Jun 5 17:18:45 server charon: 04[IKE] initiating IKE_SA myconn[1] to <IP of example.fake>
Jun 5 17:18:45 server charon: 04[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(HASH_ALG) ]
Jun 5 17:18:45 server charon: 04[NET] sending packet: from <our server IP>[500] to <IP of example.fake>[500] (1500 bytes)
Jun 5 17:18:49 server charon: 03[IKE] retransmit 1 of request with message ID 0
Jun 5 17:18:49 server charon: 03[NET] sending packet: from <our server IP>[500] to <IP of example.fake>[500] (1500 bytes)
Jun 5 17:18:56 server charon: 15[IKE] retransmit 2 of request with message ID 0
Jun 5 17:18:56 server charon: 15[NET] sending packet: from <our server IP>[500] to <IP of example.fake>[500] (1500 bytes)
Jun 5 17:19:09 server charon: 01[IKE] retransmit 3 of request with message ID 0
Jun 5 17:19:09 server charon: 01[NET] sending packet: from <our server IP>[500] to <IP of example.fake>[500] (1500 bytes)
Jun 5 17:19:32 server charon: 16[IKE] retransmit 4 of request with message ID 0
Jun 5 17:19:32 server charon: 16[NET] sending packet: from <our server IP>[500] to <IP of example.fake>[500] (1500 bytes)
Jun 5 17:20:14 server charon: 05[IKE] retransmit 5 of request with message ID 0
Jun 5 17:20:14 server charon: 05[NET] sending packet: from <our server IP>[500] to <IP of example.fake>[500] (1500 bytes)
Jun 5 17:21:30 server charon: 13[IKE] giving up after 5 retransmits
Jun 5 17:21:30 server charon: 13[IKE] peer not responding, trying again (2/3)
更新:ShrewSoft VPN 的工作配置
已使用 ShrewSoft VPN 在办公室的台式机上测试了与客户 VPN 的连接,但这不适合在开发 VPS 上使用它。所述程序导出以下配置:
n:version:4
n:network-ike-port:500
n:network-mtu-size:1380
n:client-addr-auto:1
n:network-natt-port:4500
n:network-natt-rate:15
n:network-frag-size:540
n:network-dpd-enable:1
n:network-notify-enable:1
n:client-banner-enable:1
n:client-dns-used:1
n:client-dns-auto:1
n:client-dns-suffix-auto:1
b:auth-mutual-psk:****REMOVED****
n:phase1-dhgroup:2
n:phase1-keylen:0
n:phase1-life-secs:86400
n:phase1-life-kbytes:0
n:vendor-chkpt-enable:0
n:phase2-keylen:0
n:phase2-pfsgroup:-1
n:phase2-life-secs:3600
n:phase2-life-kbytes:0
n:policy-nailed:0
n:policy-list-auto:1
s:network-host:example.fake
s:client-auto-mode:pull
s:client-iface:virtual
s:network-natt-mode:enable
s:network-frag-mode:enable
s:auth-method:mutual-psk-xauth
s:ident-client-type:keyid
s:ident-client-data:MYGROUP
s:ident-server-type:any
s:phase1-exchange:aggressive
s:phase1-cipher:auto
s:phase1-hash:auto
s:phase2-transform:auto
s:phase2-hmac:auto
s:ipcomp-transform:disabled
s:policy-level:auto
这是否表明应该对ipsec.conf
文件进行任何更改以使其与 StrongSwan 一起工作?
答案1
也许这是一个迟来的回复,但这里有一些我发现的(但尚未尝试/测试过的)问题的指示:
- 授权已弃用,并且您正在使用 leftauth。明确设置 leftauth/rightauth 和 leftauth2/rightauth2 会有所帮助。根据我的经验(并查看 github 上的 C 代码),对于 IKEv1,只有有限数量的 if/else 检查,并且当左右不匹配时(除了任何),您将收到“不支持的身份验证”消息
- 奇怪的是(我还没有查看 C 代码来验证这一点),有人声称你必须在您的机密文件中,在“:”的每一侧都有一个(即“MYUSERS:XAUTH“MYPASSWORD””,在您的 MYUSER:中没有空格)
- 根据您的发行版,某些加密方法可能不受支持(即 3DES) - 查看插件的 charon 日志以查看已加载的内容。
- 无论是谁说要删除“keyexchange”,他都忽略了你想要 IKEv1 的问题。对于 IKEv1,你必须明确设置密钥交换 = ikev1; 默认为“ike”,即服务器端的 IKEv1 和 IKEv2,而不是客户端的(这意味着,作为 VPN 服务器,我将接受客户端的 v1 和 v2)。 在您的例子中,您的角色是客户端,因此您必须明确说明。
- 我不同意删除 esp= 和 ike=,因为您已经在 OP 上明确说明了您的阶段 1(是 dh2 还是 aes256-sha1-modp2048?)和阶段 2 是什么;如果您可以为您的发行版获取“ike-scan”工具,请使用它。它甚至会提示您终端是否支持 IKEv2。通常,我从“ike-scan”中发现的是终端是否支持 3DES,因为在某些发行版中,它们不再将 3DES 作为二进制文件的一部分进行分发。
- 我注意到,对于您的 Shrewsoft 配置,您已经设置了 agressive=yes,一旦 phase2 开始工作,您可能还想在 ipsec.conf 上尝试一下。
- 假设您的“左”是客户端,“右”是远程网关,您设置了“leftid”而不是“rightid”——基本上,rightid 必须与您的 .secrets 文件匹配,除非您有意希望网关对您进行身份验证?
其他一些提示:
- 根据您正在调试的内容,将您的 charon 日志设置为“NET”和“CFG”(挑选)更高的日志级别(如果日志级别设置得足够高,您甚至不需要 tcpdump)
- 如上所述,至关重要的是两个都左侧和右侧 auth/auth2 匹配(即使您的左侧是客户端)以确保您不会收到“配置起诉不受支持...”错误(在 charon 日志中设置您的“cfg”在这里没有帮助,我不得不看看 C 代码)
- 正如有人提到的那样,请确保至少有“auto = add” - 当你执行“$ipsec 状态全部如果没有添加,你将看不到你的“conn”
无论如何,一些缺失的信息必须根据您可能希望早点提供的配置和其他日志间接推断出来,以避免在评论上来回反复:
- 第一阶段:PSK(预共享)
- 第 2 阶段:xauth-radius
我不太确定您的远程 VPN 服务器正在使用什么,但上面假设它是基于 radius 的,请确保根据它正确设置您的 xauth-plugins。
最后,请仔细阅读 Strongswan 的“ipsec.conf”文档,了解 IKEv1 所支持的内容。此外,如果您的终端基于 NTLM,请记住 NTLM 密码是 MD4 编码的(只需搜索将 UTF16 字符串作为 MD4 传输到 openssl 中的内容即可)。