前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker搭建虚拟专用网

Docker搭建虚拟专用网

原创
作者头像
甄士隐
修改2022-03-09 09:37:09
7.5K1
修改2022-03-09 09:37:09
举报
文章被收录于专栏:混合云

虚拟专用网多方案搭建

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 HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /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_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters 底下新增:

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 虚拟专用网多方案搭建
    • IPsec协议虚拟专用网
      • 前言
      • 拉取镜像
      • 配置文件
      • 启动服务
      • 注意事项
      • 无人值守脚本
      • 高级版(不建议新手观看)
      • 写在后面
    • PPTP协议虚拟专用网
      • sysctl.conf 文件修改,支持ipv4转发
      • 检测PPP服务是否开启
      • 安装PPP、PPTPD、Iptables组件
      • 编辑配置文件
      • 防火墙配置及设置nat转发
      • 重启防火墙
      • 配置开机自启
      • 最后
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档