Docker搭建虚拟专用网

2022-03-09 09:37:09 浏览数 (3)

虚拟专用网多方案搭建

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

注意事项

Window连接虚拟专用网需要初始化系统注册表,以支持Ipsec协议虚拟专用网.

代码语言:text复制
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 底下新增:

代码语言:txt复制
名称:"NegotiateDH2048_AES256"
类型:"REG_DWORD"
值:"1"

保存退出即可。

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

PPTP协议虚拟专用网

最近尝试过使用Docker搭建各个类型的办公类型虚拟专用网,但使用感受皆不尽人意。为什么呢?主要是因为我个人感觉容器部署造成的资源占用十分严重。而且,经过长时间的使用docker,你可能会感叹docker的便捷,但是随之而来的是操作系统卡顿!!!于是乎,我开始了寻求原生Linux操作系统下的虚拟专用网搭建之路。

正文

sysctl.conf 文件修改,支持ipv4转发

代码语言:text复制
vim /etc/sysctl.conf

找到:net.ipv4.ip_forward = 0 (没有就新增一行)修改为:

代码语言:text复制
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通过虚拟专用网连接。

1 人点赞