服务器端
首先先下载一个ipsec vpn的镜像
docker pull fcojean/l2tp-ipsec-vpn-server
然后本地创建一个.env的文件,比如这里创建的就是vpn.env
,文件内容为
VPN_IPSEC_PSK=psk_password
VPN_USER_CREDENTIAL_LIST=[{"login":"Test1","password":"test1"},{"login":"Test2","password":"test2"}]
其中psk_password
是预共享秘钥,然后下面是两个账户,Test1
与Test2
。
然后可以启动L2TP镜像,首先挂载个内核模块
sudo modprobe af_key
然后运行镜像:
docker run \
--name l2tp-ipsec-vpn-server \
--env-file ./vpn.env \
-p 500:500/udp \
-p 4500:4500/udp \
-v /lib/modules:/lib/modules:ro \
-d --privileged \
fcojean/l2tp-ipsec-vpn-server
查看运行是否成功:
docker logs l2tp-ipsec-vpn-server
看到显示Connect to your new VPN with these details:
即可。
测试是第一次运行的时候需要加--name l2tp-ipsec-vpn-server \
,后面运行如下即可,由于本环境不需要开机自启动,所以就没加自启了
docker run \
--env-file ./vpn.env \
-p 500:500/udp \
-p 4500:4500/udp \
-v /lib/modules:/lib/modules:ro \
-d --privileged \
fcojean/l2tp-ipsec-vpn-server
如果重启之后,docker容器是默认退出的,这里由于没有做--restart=always
的,所以重启之后要重新启用container。
docker start l2tp-ipsec-vpn-server
这里的服务名是根据docker ps查看出来的,即最后一列,这里查看的结果就是l2tp-ipsec-vpn-server
客户端
windowns
测试是在属性里面,安全一栏选择可选加密,然后未加密的密码勾选上
如果拨号无法成功,那么需要添加一个注册表文件,内容如下
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent]
"AssumeUDPEncapsulationContextOnSendRule"=dword:00000002
首先用文本把上面的文字进行复制,然后将文件修改为*.reg格式,双击添加即可,其他移动客户端按照通常的配法即可,没太多需要注意的地方。
参考
https://github.com/hwdsl2/docker-ipsec-vpn-server
https://blog.csdn.net/xindoo/article/details/52830609
https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-zh.md
错误
Cannot find valid public IP. Please manually enter the public IP,of this server in your 'env' file, using variable 'VPN_PUBLIC_IP'.
则增加 --env VPN_PUBLIC_IP=你的IP
docker run \
--name l2tp-ipsec-vpn-server \
--env-file ./vpn.env \
-p 500:500/udp \
-p 4500:4500/udp \
-v /lib/modules:/lib/modules:ro \
-d --privileged \
-env VPN_PUBLIC_IP=172.16.0.11 \
fcojean/l2tp-ipsec-vpn-server
--env VPN_PUBLIC_IP=172.16.0.11 \