前言
目前我们在面临远程办公所采用的策略,无非就是利用第三方软件进行远程办公,比如向日葵,TeamViewer进行远程控制,但是该方式往往受到限速等因素导致体验十分不好。
所以,编者找遍了很多方式,想到了公司所采用的带有VPN功能的H3C路由器,由此便思考能不能自己搭建一个建议的办公用的VPN?果不其然,在Docker容器平台就可以进行搭建简单的VPN操作.
正文
- 拉取镜像
# 镜像1
docker pull hwdsl2/ipsec-vpn-server
# 备用
docker pull caixb/vpn-server:1.0
- 创建配置文件
sudo vim /etc/docker/vpn/vpn.env
# 预共享密钥
VPN_IPSEC_PSK=Abcd123!
# 用户账号
VPN_USER=caixb
# 链接密码
VPN_PASSWORD=Abcd123!
- 启动服务
# 镜像1
docker run \
-itd \
--name vpn \
--env-file /etc/docker/vpn/vpn.env \
--restart=always \
-p 500:500/udp \
-p 4500:4500/udp \
-d --privileged \
hwdsl2/ipsec-vpn-server
#备用镜像
docker run \
-itd \
--name vpn \
--env-file /etc/docker/vpn/vpn.env \
--restart=always \
-p 500:500/udp \
-p 4500:4500/udp \
-d --privileged \
caixb/vpn-server:1.0
- Window连接VPN
a. 初始化系统注册表,以支持Ipsec协议VPN
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f
b. 新建VPN连接
c. 打开网络适配器设置VPN连接方式
d. 重启电脑后连接即可。
附:无人值守连接脚本
:start
TIMEOUT /T 5
rasdial 101.34.x.x caixb Abcd123!
cls & echo "VPN have been connected"
TIMEOUT /T 1800
:begin
ping -n 1 192.168.42.1 >nul
if "%errorlevel%"=="0" (cls & echo "vpn is connected") else (echo "reconnect" & goto redial)
TIMEOUT /T 5
goto start
:redial
TIMEOUT /T 3
rasdial 101.34.x.x caixb Abcd123!
cls & echo "VPN have been connected"
TIMEOUT /T 1800
goto begin
高级版(不建议新手观看)
所谓高级版,也就是开通IKEv2协议VPN连接方式,官方说明:https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto-zh.md#%E9%85%8D%E7%BD%AE-ikev2-vpn-%E5%AE%A2%E6%88%B7%E7%AB%AF
现代操作系统(比如 Windows 7 和更新版本)支持 IKEv2 协议标准。因特网密钥交换(英语:Internet Key Exchange,简称 IKE 或 IKEv2)是一种网络协议,归属于 IPsec 协议族之下,用以创建安全关联 (Security Association, SA)。与 IKE 版本 1 相比较,IKEv2 的 功能改进 包括比如通过 MOBIKE 实现 Standard Mobility 支持,以及更高的可靠性。
升级方式,在上文IPsec协议基础的VPN搭建下,运行以下命令:
docker exec -it vpn ikev2.sh --auto
ikev2.sh这是容器中自带的一个辅助脚本。
结束会输出以下内容:
================================================
IKEv2 setup successful. Details for IKEv2 mode:
VPN server address: 101.34.214.42
VPN client name: vpnclient
Client configuration is available inside the
Docker container at:
/etc/ipsec.d/vpnclient.p12 (for Windows & Linux)
/etc/ipsec.d/vpnclient.sswan (for Android)
/etc/ipsec.d/vpnclient.mobileconfig (for iOS & macOS)
*IMPORTANT* Password for client config files:
PV7e4hCDjKwmhiGxe6
Write this down, you'll need it for import!
Next steps: Configure IKEv2 VPN clients. See:
https://git.io/ikev2clients
================================================
记住第15行的密码。
然后运行以下命令:
docker cp vpn:/etc/ipsec.d/vpnclient.p12 /etc/docker
从镜像中把vpnclient.p12证书拷贝到宿主机,然后复制到Window主机中。
随后,运行以下命令将证书导入到系统中:
certutil -f -importpfx ".p12文件的位置和名称" NoExport
会提示输入PFX密码,就是第15的密码。
然后运行以下命令添加VPN连接即可:
powershell -command "Add-VpnConnection -ServerAddress '你的 VPN 服务器 IP(或者域名)' -Name 'My IKEv2 VPN' -TunnelType IKEv2 -AuthenticationMethod MachineCertificate -EncryptionLevel Required -PassThru"
写在后面
在使用Window 10连接时,经常会出现:策略匹配错误
这个问题是个历史遗留问题,讲到 IKEv2的配置,当时使用的是Windows 7作为客户端。然而使用Windows 10作客户端时,拨号时会产生“策略匹配错误”,在事件管理器里面查询,会得到一个13868的错误号。
这是因为Windows客户端提出了一个弱Diffie-Hellman(DH)组(1024位MODP)。除非用户明确配置,否则strongSwan不再使用该组。
解决方案:修改注册表,win+R输入regedit
在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters 底下新增:
名称:"NegotiateDH2048_AES256"
类型:"REG_DWORD"
值:"1"
保存退出即可。
大功告成!不建议新手弄是因为你们可能看不懂官方的文档,出错了也不好找原因。