我花了一上午的时间尝试在 Debian Squeeze 服务器上使用 Openswan 和 xl2tpd 配置 L2TP/IPsec VPN,供 iOS 和 Mac 客户端混合使用。我尝试使用预共享密钥进行设置,以简化操作。
iPhone 连接并开始创建 VPN,然后卡住并半途失败。我摆弄了很多参数并仔细检查了所有内容,但还是找不到问题所在。
/var/log/auth.log
这是卡住之前的最后一条日志消息:
pluto[30733]: "L2TP-PSK"[5] 166.147.96.226 #5: STATE_QUICK_R2: IPsec SA established tunnel mode {ESP=>0x0659cf9f <0xc3c2f68c xfrm=AES_256-HMAC_SHA1 NATOA=none NATD=166.147.96.226:10682 DPD=enabled}
大约 30 秒后,iPhone 放弃并且显示以下内容auth.log
:
pluto[30733]: ERROR: asynchronous network error report on br1 (sport=4500) for message to 166.147.96.226 port 10682, complainant 166.147.96.226: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)]
这是什么意思?服务器无法联系客户端,还是客户端无法建立其他连接,并将此错误传递到它可以建立的 IPsec 连接?
不幸的是,我正在 AT&T 的蜂窝网络上使用 iPhone 进行测试,因为我位于 Wi-Fi 网络内,我想在其中建立 VPN。AT&T 会阻止 VPN 流量吗?
我知道 IPsec 身份验证正在运行,因为如果我更改或删除该行/etc/ipsec.secrets
,连接会更快失败,而且我看不到这些日志行。
我相信防火墙允许 UDP 端口 500 和 4500 以及 ESP 协议,因为如果我阻止这些协议,连接就会再次更快失败。
/etc/ipsec.conf
连接部分:
conn L2TP-PSK
authby=secret
pfs=no
rekey=no
keyingtries=3
dpddelay=30
dpdtimeout=120
dpdaction=clear
compress=yes
left=%defaultroute
leftprotoport=udp/1701
right=%any
rightprotoport=udp/0
auto=add
/etc/ipsec.secrets
VPN-SERVER-PUBLIC-IP %any: PSK "mysecretishere"
/etc/xl2tpd/xl2tpd.conf
[global] ; Global parameters:
access control = no
rand source = dev
[lns default] ; Our fallthrough LNS definition
ip range = 192.168.1.120-192.168.1.127
local ip = 192.168.1.119
require chap = yes
refuse pap = no
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tp
length bit = yes
/etc/ppp/options.l2tp
ipcp-accept-local
ipcp-accept-remote
ms-dns 192.168.1.1
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
plugin pppol2tp.so
require-mschap-v2
答案1
AT&T 似乎阻止传入的 UDP 数据包(不允许它们穿越 NAT),因此设置 L2TP/IPsec 会非常困难。我认为你只能使用 PPTP。
答案2
这个错误就是你的线索。
ERROR: asynchronous network error report on br1 (sport=4500) for message to 166.147.96.226 port 10682, complainant 166.147.96.226: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)
我以前见过这种情况,每次都是因为主机服务器或远程客户端的网络/防火墙阻止了 ipsec 数据包。如果是用户控制的防火墙或路由器,这是一个简单的修复(启用 IPSEC),但如果它不受您的控制,您就没那么幸运了,必须使用不同的协议。有些人说更改 left=17/%any,但这对我来说从来没有用过(在极少数情况下,客户端可能很聪明,会尝试使用可能未被阻止的其他端口)。