最近一段时间,我们的 mac 需要通过 vpn 访问公司的内网。但是当我按照了说明进行了配置之后,却发现我的ip 总是在我的本地,发现我的网站没有连接到公司的内网。这件事情折腾耽误了我快一个月的时间。
开始的时候以为是我的电脑的 vpn 客户端的问题,后面下载了 shimo 的客户端发现还是发生了同样的问题。无论我怎么 google 还是没有找出问题的所在。
后面我以为自己自己电脑的问题,于是用自己的另一台 mac 连接还是遇见的同样的问题(注: 这两台 mac 是用的同一套系统,通过 macos 系统的迁移助手来对系统进行的迁移。)
我去苹果商店想问那里的员工帮我看看是什么问题,但是他们说,他们也没有办法,只能够帮我重装系统。
后面我找了另一台 mac 连接 vpn 并且将 vpn 的日志打出来。
tail -f /var/log/ppp.log
经过仔细对比,才发现的问题所在下面是我的 vpn 连接时打出的日志(无法正常连接)。
> rcvd [LCP EchoReq id=0x0 magic=0xb1926788]
> sent [IPV6CP ConfReq id=0x1 <addr fe80::12dd:b1ff:fec7:3c1f>]
> rcvd [IPCP ConfReq id=0x1 <addr 172.26.123.1>]
> ipcp: returning Configure-ACK
> sent [IPCP ConfAck id=0x1 <addr 172.26.123.1>]
> rcvd [IPCP ConfRej id=0x1 <ms-dns3 0.0.0.0>]
> sent [IPCP ConfReq id=0x2 <addr 59.37.7.226> <ms-dns1 0.0.0.0>]
> rcvd [LCP ProtRej id=0x2 80 57 01 01 00 0e 01 0a 12 dd b1 ff fe c7 3c 1f]
> rcvd [IPCP ConfNak id=0x2 <addr 172.26.123.138> <ms-dns1 172.26.9.10>]
> sent [IPCP ConfReq id=0x3 <addr 172.26.123.138> <ms-dns1 172.26.9.10>]
> rcvd [IPCP ConfAck id=0x3 <addr 172.26.123.138> <ms-dns1 172.26.9.10>]
> ipcp: up
> local IP address 172.26.123.138
> remote IP address 172.26.123.1
> primary DNS address 172.26.9.10
> Received protocol dictionaries
> Script /etc/ppp/ip-up started (pid 15535)
> l2tp_wait_input: Address added. previous interface setting (name: en4, address: 172.20.10.3), current interface setting (name: ppp0, family: PPP, address: 172.26.123.138, subnet: 255.255.0.0, destination: 172.26.123.1).
> Committed PPP store on install command
> L2TP port-mapping update for en4 ignored: VPN is the Primary interface. Public Address: 0, Protocol: None, Private Port: 0, Public Port: 0
> L2TP clearing port-mapping for en4
> Script /etc/ppp/ip-up finished (pid 15535), status = 0x0
> l2tp_wait_input: Address deleted. previous interface setting (name: en4, address: 172.20.10.3), deleted interface setting (name: en4, family: Ether, address: 172.20.10.3, subnet: 255.255.255.240, destination: 172.20.10.15).
> starting wait-interface timer for l2tp: 20 secs
> write: Can't assign requested address
> l2tp_wait_interface_timeout: 20 secs TIMEOUT waiting for interface to be reconfigured. previous setting (name: en4, address: 172.20.10.3).
> L2TP has detected change in the network and lost connection with the server.
这是能够正常连接 vpn 的电脑打出的日志
rcvd [LCP EchoRep id=0x0 magic=0x96088355]
rcvd [CHAP Success id=0x7e "Login OK, welcom!"]
CHAP authentication succeeded: Login OK, welcom!
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::aebc:32ff:fed4:bf33>]
rcvd [IPCP ConfReq id=0x1 <addr 172.26.123.1>]
ipcp: returning Configure-ACK
sent [IPCP ConfAck id=0x1 <addr 172.26.123.1>]
rcvd [LCP ProtRej id=0x2 80 57 01 01 00 0e 01 0a ae bc 32 ff fe d4 bf 33]
rcvd [IPCP ConfRej id=0x1 <ms-dns3 0.0.0.0>]
sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1 0.0.0.0>]
rcvd [IPCP ConfNak id=0x2 <addr 172.26.123.212> <ms-dns1 172.26.9.10>]
sent [IPCP ConfReq id=0x3 <addr 172.26.123.212> <ms-dns1 172.26.9.10>]
rcvd [IPCP ConfAck id=0x3 <addr 172.26.123.212> <ms-dns1 172.26.9.10>]
ipcp: up
local IP address 172.26.123.212
remote IP address 172.26.123.1
primary DNS address 172.26.9.10
Received protocol dictionaries
l2tp_wait_input: Address added. previous interface setting (name: en0, address: 192.168.1.106), current interface setting (name: ppp0, family: PPP, address: 172.26.123.212, subnet: 255.255.0.0, destination: 172.26.123.1).
Committed PPP store on install command
L2TP port-mapping update for en0 ignored: VPN is the Primary interface. Public Address: 0, Protocol: None, Private Port: 0, Public Port: 0
L2TP clearing port-mapping for en0
发现在我的日志中多执行了一个脚本
Script /etc/ppp/ip-up
于是我
head /etc/ppp/ip-up
#!/bin/sh
# Generated on 2016-12-15 by VPNCloud
# Copyright (C) 2016 VPNCloud. All rights reserved.
# https://www.ytmac.com
......
由此终于找到了元凶—— 前年我购买过云梯的服务,他们号称是智能路由,能够分流国内与国外的流量,而这个脚本就是他们用了实现流量分流的方法。简单来时就是:
基本的思路是:把国内所有的已知IP段,全部都通过路由表的方式,强制其走本地默认网关,剩下的国外流量都走VPN。这个方法是实施起来相对最容易的,虽然不是最完美的(例如,如果没有被GFW的网络流量,我也希望通过本地网关的)。
这个脚本导致将我的发向国内请求都被强制导流走本地的网关,换句话说就是没有通过 vpn ,导致自己一直没有办法连接到内网。
解决办法
至此,折磨了我一个月的问题终于解决了。
sudo rm /etc/ppp/ip*
将这两个脚本删除,之后我终于能够正常访问公司的内网了。
网友评论