虚拟专用网多方案搭建
IPsec协议虚拟专用网
前言
目前我们在面临远程办公所采用的策略,无非就是利用第三方软件进行远程办公,比如向日葵,TeamViewer进行远程控制,但是该方式往往受到限速等因素导致体验十分不好。
所以,编者找遍了很多方式,想到了公司所采用的带有虚拟专用网功能的H3C路由器,由此便思考能不能自己搭建一个建议的办公用的虚拟专用网?果不其然,在Docker容器平台就可以进行搭建简单的虚拟专用网操作.
拉取镜像
代码语言:text复制docker pull hwdsl2/ipsec-vpn-server
代码语言:text复制# 备用镜像
docker pull caixb/vpn-server:1.0
配置文件
创建配置文件
代码语言:text复制vim /etc/docker/vpn/vpn.env
代码语言:shell复制# 预共享密钥
VPN_IPSEC_PSK=Abcd123!
# 用户账号
VPN_USER=caixb
# 链接密码
VPN_PASSWORD=Abcd123!
启动服务
代码语言:text复制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
代码语言:text复制#备用镜像
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
注意事项
代码语言:text复制Window连接虚拟专用网需要初始化系统注册表,以支持Ipsec协议虚拟专用网.
REG ADD HKLMSYSTEMCurrentControlSetServicesPolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f
无人值守脚本
代码语言:text复制: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协议虚拟专用网连接方式,官方说明:https://github.com/hwdsl2/setup-ipsec-vpn/
现代操作系统(比如 Windows 7 和更新版本)支持 IKEv2 协议标准。因特网密钥交换(英语:Internet Key Exchange,简称 IKE 或 IKEv2)是一种网络协议,归属于 IPsec 协议族之下,用以创建安全关联 (Security Association, SA)。与 IKE 版本 1 相比较,IKEv2 的 功能改进 包括比如通过 MOBIKE 实现 Standard Mobility 支持,以及更高的可靠性。
升级方式,在上文IPsec协议基础的虚拟专用网搭建下,运行以下命令:
代码语言:text复制docker exec -it vpn ikev2.sh --auto
ikev2.sh
这是容器中自带的一个辅助脚本
结束会输出以下内容:
代码语言:shell复制================================================
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行的密码!!!
然后运行以下命令:
代码语言:text复制docker cp vpn:/etc/ipsec.d/vpnclient.p12 /etc/docker
从镜像中把vpnclient.p12证书拷贝到宿主机,然后复制到Window主机中。
随后,运行以下命令将证书导入到系统中:
代码语言:text复制certutil -f -importpfx ".p12文件的位置和名称" NoExport
会提示输入PFX密码,就是第15的密码。
然后运行以下命令添加虚拟专用网连接即可:
代码语言:text复制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_MACHINESystemCurrentControlSetServicesRasmanParameters
底下新增:
名称:"NegotiateDH2048_AES256"
类型:"REG_DWORD"
值:"1"
保存退出即可。
大功告成!不建议新手弄是因为你们可能看不懂官方的文档,出错了也不好找原因。
PPTP协议虚拟专用网
最近尝试过使用Docker搭建各个类型的办公类型虚拟专用网,但使用感受皆不尽人意。为什么呢?主要是因为我个人感觉容器部署造成的资源占用十分严重。而且,经过长时间的使用docker,你可能会感叹docker的便捷,但是随之而来的是操作系统卡顿!!!于是乎,我开始了寻求原生Linux操作系统下的虚拟专用网搭建之路。
正文
sysctl.conf 文件修改,支持ipv4转发
代码语言:text复制vim /etc/sysctl.conf
找到:net.ipv4.ip_forward = 0
(没有就新增一行)修改为:
net.ipv4.ip_forward = 1
保存并退出,使配置生效。
代码语言:text复制sysctl -p
检测PPP服务是否开启
代码语言:text复制cat /dev/ppp
结果显示:
代码语言:text复制cat: /dev/ppp: No such file or directory
可以继续!
安装PPP、PPTPD、Iptables组件
代码语言:text复制yum install update
yum install -y ppp iptables pptpd
编辑配置文件
代码语言:text复制vim /etc/pptpd.conf
代码语言:text复制# 修改以下内容
localip 服务器内网IP
remoteip VPN分配的网段 例:192.168.0.100-150,192.168.0.156
代码语言:text复制vim /etc/ppp/options.pptpd
代码语言:text复制# 修改以下内容
ms-dns 8.8.8.8
ms-dns 8.8.4.4
代码语言:text复制vim /etc/ppp/chap-secrets
代码语言:text复制# 新增连接用户
用户名 * 密码 *
防火墙配置及设置nat转发
代码语言:text复制systemctl start firewalld
firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --zone=public --add-port=47/tcp
firewall-cmd --permanent --zone=public --add-port=1723/tcp
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p gre -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ppp -o eth0 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o ppp -j ACCEPT
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth0 -j MASQUERADE -s 192.168.0.0/24
重启防火墙
代码语言:text复制firewall-cmd --reload
配置开机自启
代码语言:text复制systemctl start pptpd
systemctl enable pptpd
systemctl status pptpd
最后
至此,PPTP服务已搭建完成,可以使用Windows或Mac通过虚拟专用网连接。