前言

    目前我们在面临远程办公所采用的策略,无非就是利用第三方软件进行远程办公,比如向日葵,TeamViewer进行远程控制,但是该方式往往受到限速等因素导致体验十分不好。

    所以,编者找遍了很多方式,想到了公司所采用的带有VPN功能的H3C路由器,由此便思考能不能自己搭建一个建议的办公用的VPN?果不其然,在Docker容器平台就可以进行搭建简单的VPN操作.

    正文

    1. 拉取镜像
    1. # 镜像1
    2. docker pull hwdsl2/ipsec-vpn-server
    3. # 备用
    4. docker pull caixb/vpn-server:1.0
    1. 创建配置文件sudo vim /etc/docker/vpn/vpn.env
    1. # 预共享密钥
    2. VPN_IPSEC_PSK=Abcd123!
    3. # 用户账号
    4. VPN_USER=caixb
    5. # 链接密码
    6. VPN_PASSWORD=Abcd123!
    1. 启动服务
    1. # 镜像1
    2. docker run \
    3. -itd \
    4. --name vpn \
    5. --env-file /etc/docker/vpn/vpn.env \
    6. --restart=always \
    7. -p 500:500/udp \
    8. -p 4500:4500/udp \
    9. -d --privileged \
    10. hwdsl2/ipsec-vpn-server
    11. #备用镜像
    12. docker run \
    13. -itd \
    14. --name vpn \
    15. --env-file /etc/docker/vpn/vpn.env \
    16. --restart=always \
    17. -p 500:500/udp \
    18. -p 4500:4500/udp \
    19. -d --privileged \
    20. caixb/vpn-server:1.0
    1. Window连接VPN

    a. 初始化系统注册表,以支持Ipsec协议VPN

    1. REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f

    b. 新建VPN连接

    Docker搭建简易VPN(支持IKEv2、IPsec协议) - 图1

    c. 打开网络适配器设置VPN连接方式

    Docker搭建简易VPN(支持IKEv2、IPsec协议) - 图2
    Docker搭建简易VPN(支持IKEv2、IPsec协议) - 图3

    d. 重启电脑后连接即可。

    附:无人值守连接脚本

    1. :start
    2. TIMEOUT /T 5
    3. rasdial 101.34.x.x caixb Abcd123!
    4. cls & echo "VPN have been connected"
    5. TIMEOUT /T 1800
    6. :begin
    7. ping -n 1 192.168.42.1 >nul
    8. if "%errorlevel%"=="0" (cls & echo "vpn is connected") else (echo "reconnect" & goto redial)
    9. TIMEOUT /T 5
    10. goto start
    11. :redial
    12. TIMEOUT /T 3
    13. rasdial 101.34.x.x caixb Abcd123!
    14. cls & echo "VPN have been connected"
    15. TIMEOUT /T 1800
    16. 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搭建下,运行以下命令:

    1. docker exec -it vpn ikev2.sh --auto

    ikev2.sh这是容器中自带的一个辅助脚本。

    结束会输出以下内容:

    1. ================================================
    2. IKEv2 setup successful. Details for IKEv2 mode:
    3. VPN server address: 101.34.214.42
    4. VPN client name: vpnclient
    5. Client configuration is available inside the
    6. Docker container at:
    7. /etc/ipsec.d/vpnclient.p12 (for Windows & Linux)
    8. /etc/ipsec.d/vpnclient.sswan (for Android)
    9. /etc/ipsec.d/vpnclient.mobileconfig (for iOS & macOS)
    10. *IMPORTANT* Password for client config files:
    11. PV7e4hCDjKwmhiGxe6
    12. Write this down, you'll need it for import!
    13. Next steps: Configure IKEv2 VPN clients. See:
    14. https://git.io/ikev2clients
    15. ================================================

    记住第15行的密码。

    然后运行以下命令:

    1. docker cp vpn:/etc/ipsec.d/vpnclient.p12 /etc/docker

    从镜像中把vpnclient.p12证书拷贝到宿主机,然后复制到Window主机中。

    随后,运行以下命令将证书导入到系统中:

    1. certutil -f -importpfx ".p12文件的位置和名称" NoExport

    会提示输入PFX密码,就是第15的密码。

    然后运行以下命令添加VPN连接即可:

    1. 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

    1. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters 底下新增:
    2. 名称:"NegotiateDH2048_AES256"
    3. 类型:"REG_DWORD"
    4. 值:"1"

    保存退出即可。

    大功告成!不建议新手弄是因为你们可能看不懂官方的文档,出错了也不好找原因。