有人路由器VPN部署方案

有人路由器VPN部署方案*

一、组网思路
多个摄像头放在不同的工地,现在需要远程访问这些摄像头的后台(https-443),远程连接这些摄像头的操作系统(ssh-22)传输图片、视频或二进制文件。
采用(摄像头跟有人路由器组成子网)openvpnclient——openvpnserver——(pc)openvpnclient的组网方案
有人路由器插4G卡联网,lan口接交换机,交换机可以接多个摄像头,这些摄像头与路由器组成了一个独立的局域网
路由器配置作为openvpn server的客户端连接openvpn server
电脑也作为openvpn server的客户端连接openvpn server
openvpn server上配置客户端的子网互联
电脑上可以成功访问摄像头的后台
`
二、网络架构
基本的架构图如下:

在这里插入图片描述

这里搭建PC机(192.168.0.109)通过VPN远端访问摄像头(192.168.11.216)的网络环境

三、快速安装openvpnserver
#yum安装OpenVpn2.4.10,github下载加密软件easy-rsa3
[root@nginx ~]# yum install -y epel-release
[root@nginx ~]# yum install -y openvpn
[root@nginx ~]# cd /usr/local/src
[root@nginx src]# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
[root@nginx src]# unzip master.zip
[root@nginx src]# mv easy-rsa-master easy-rsa
[root@nginx src]# cp -R easy-rsa /etc/openvpn
[root@nginx src]# cd /etc/openvpn/easy-rsa/easyrsa3
[root@nginx easyrsa3]# vim vars
###修改以下配置,都是自定义,没有特殊要求
set_var EASYRSA_REQ_COUNTRY “CN”
set_var EASYRSA_REQ_PROVINCE “ZheJiang”
set_var EASYRSA_REQ_CITY “HangZhou”
set_var EASYRSA_REQ_ORG “pinming”
set_var EASYRSA_REQ_EMAIL “pmsit@pinm”
set_var EASYRSA_REQ_OU “youren-vpn”
[root@nginx easyrsa3]# ./easyrsa init-pki
Your newly created PKI dir is: /etc/openvpn/easy-rsa/easyrsa3/pki
#创建CA证书,输入两遍CA密码,common name可回车不填
[root@nginx easyrsa3]# ./easyrsa build-ca
Your new CA certificate file for publishing is at:/etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt
#创建服务器端证书,common name可回车不填
[root@nginx easyrsa3]# ./easyrsa gen-req server nopass
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/easyrsa3/pki/reqs/server.req
key: /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key
#签约服务端证书,输入之前的CA密码
[root@nginx easyrsa3]# ./easyrsa sign server server
Certificate created at: /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt
#创建数据穿越密钥
[root@nginx easyrsa3]# ./easyrsa gen-dh
DH parameters of size 2048 created at /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem

#创建client证书
#初始化目录
[root@nginx easyrsa3]# cp -r /usr/local/src/easy-rsa /etc/openvpn/client/
[root@nginx easyrsa3]# cd /etc/openvpn/client/easy-rsa/easyrsa3
#创建客户端CA证书,输入客户端CA密码,common name可回车不填
[root@nginx easyrsa3]# ./easyrsa init-pki
[root@nginx easyrsa3]# ./easyrsa build-ca
Your new CA certificate file for publishing is at:/etc/openvpn/client/easy-rsa/easyrsa3/pki/ca.crt
#创建客户端证书,common name可回车不填,注意这里客户端证书生成要nopass不设密码,路由器上没有地方填密码
[root@nginx easyrsa3]# ./easyrsa gen-req younopass nopass
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/client/easy-rsa/easyrsa3/pki/reqs/younopass.req
key: /etc/openvpn/client/easy-rsa/easyrsa3/pki/private/younopass.key
#导入客户端证书
[root@nginx easyrsa3]# cd /etc/openvpn/easy-rsa/easyrsa3/
[root@nginx easyrsa3]# ./easyrsa import-req /etc/openvpn/client/easy-rsa/easyrsa3/pki/reqs/younopass.req younopass
#签约客户端证书,输入登录密码
[root@nginx easyrsa3]# ./easyrsa sign client younopass
Certificate created at: /etc/openvpn/easy-rsa/easyrsa3/pki/issued/younopass.crt
#自定义younopass客户端获取的IP,把IP固定住
[root@nginx easyrsa3]# cd /etc/openvpn
[root@nginx openvpn]# mkdir ccd
[root@nginx openvpn]# cd ccd
[root@nginx ccd]# vim younopass
#固定客户端IP为10.8.0.5在服务端的IP为10.8.0.6,IP地址对的写法有详细规则
ifconfig-push 10.8.0.5 10.8.0.6

#配置openvpn主配
[root@nginx easyrsa3]# cd /etc/openvpn/easy-rsa/easyrsa3/pki/
[root@nginx pki]# cp ca.crt /etc/openvpn/server/
[root@nginx pki]# cp private/server.key /etc/openvpn/server/
[root@nginx pki]# cp issued/server.crt /etc/openvpn/server/
[root@nginx pki]# cp dh.pem /etc/openvpn/server/
[root@nginx pki]# cp ca.crt /etc/openvpn/client/
[root@nginx pki]# cp issued/younopass.crt /etc/openvpn/client/
[root@nginx pki]# cp /etc/openvpn/client/easy-rsa/easyrsa3/pki/private/younopass.key /etc/openvpn/client/

#修改配置文件
[root@nginx ~]# cp /usr/share/doc/openvpn-2.4.10/sample/sample-config-files/server.conf /etc/openvpn
[root@nginx ~]# cd /etc/openvpn
[root@nginx openvpn]# cp server.conf server.conf.bak
[root@nginx openvpn]# egrep -v “#|;|^$” server.conf.bak > server.conf
[root@nginx openvpn]# vim server.conf
#配置内网端口,访问协议,访问模式
port 55555
proto tcp
dev tun
#配置证书位置
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key # This file should be kept secret
dh /etc/openvpn/server/dh.pem
#配置客户端可以获取的IP
server 10.8.0.0 255.255.255.0
#配置服务器端的路由,子网互通的话要把其它客户端的路由在服务端加好
push “route 172.16.0.0 255.255.0.0”
push “route 192.168.11.0 255.255.255.0”
push “route 192.168.1.0 255.255.255.0”
#配置自定义客户端的目录,固定IP在目录里配置
client-config-dir /etc/openvpn/ccd
#配置推送给客户端的路由,子网互通客户端也要加路由
route 192.168.11.0 255.255.255.0
route 192.168.1.0 255.255.255.0
#打开客户端网络互通参数
client-to-client
#以下两个参数打开,允许证书复用
#duplicate-cn
#max-clients 3
#ifconfig-pool-persist ipp.txt
keepalive 10 120
#以下参数打开,提高安全性抵御ddos
#tls-auth ta.key 0 # This file is secret
#配置加密规范,加密规则是否使用压缩等
cipher AES-256-CBC
persist-key
persist-tun
comp-lzo
status openvpn-status.log
log /var/log/openvpn.log
verb 3
script-security 3

#配置防火墙转发流量
[root@nginx ~]# echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.d/99-sysctl.conf
[root@nginx ~]# sysctl -p
#centos7关闭自带的firewalld,启动iptables
[root@nginx ~]# systemctl stop firewalld
[root@nginx ~]# systemctl disable firewalld
[root@nginx ~]# yum install iptables-services -y
[root@nginx ~]# systemctl enable iptables
[root@nginx ~]# systemctl start iptables
#打开Openvpn服务相关端口
[root@nginx ~]# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 55555 -j ACCEPT
#对来自客户端的流量转发到本机端口,用于服务端局域网通信
[root@nginx ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
[root@nginx ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#删除两条默认规则
[root@nginx ~]# vim /etc/sysconfig/iptables
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#最后保存防火墙规则
[root@nginx ~]# service iptables save

#打开openvpn server端
[root@nginx openvpn]# openvpn /etc/openvpn/server.conf &
至此,一台使用证书和私有密码的openvpn server的服务器已搭建完成,并为younopass用户生成了一套证书,固定其IP为10.8.0.5
我们在路由器上把这台OpenVpn Server的端口映射出去

在这里插入图片描述

外网地址为:202.107.226.118:55555 映射的内网地址为:172.16.9.200:55555
四、有人路由器连接
1.查看路由器现有接口
路由器初始地址:192.168.1.1,初始用户名密码为:root/root,修改lan口地址为192.168.11.1跟摄像头192.168.11.216在同一个网段
lan口:可以配置路由器lan口地址,这里要和摄像头配在同一个网段
wan_4G口:4G卡网口,插卡后获取到了IPv4地址
wan_wired口:有线网wan口
在这里插入图片描述

2.新增一个openvpn接口
左下角点击”添加新接口“
在这里插入图片描述

命名,协议选择tun

在这里插入图片描述

基本设置,按照此选择,远程地址写vpn server服务器的外网地址,端口填写映射的外网端口
在这里插入图片描述

高级设置,加密标准AES-256 CBC哈希校验SHA1,勾选使用LZO加密传输
实时VPN在线检测,可以打开也可以关闭,建议关闭,实测时勾选上可能会导致VPN不断重启

在这里插入图片描述

把服务器/etc/openvpn/client下生成的nopass证书编辑复制进去
公共服CA证书:ca.crt
公共客户端证书:younopass.crt
客户端私钥:younopass.key

在这里插入图片描述

防火墙设置,分配区域
在这里插入图片描述

全部配置完毕后,点击保存和应用
3.防火墙配置
按此配置,选择接受
在这里插入图片描述

全部配置完毕之后,确认获取到了IP:10.8.0.5 并且存在数据交换
在这里插入图片描述

五、子网互联
1.server上确认与摄像头子网互联
ping检测wan口获取的IP

在这里插入图片描述

traceroute路由检测lan口摄像头IP,确认走的连接客户端的那条路由,下一跳10.8.0.5

在这里插入图片描述

2.路由器上确认与server互联
ping检测vpn server的内网IP
在这里插入图片描述

traceroute检测vpn server的内网IP
在这里插入图片描述

至此,确认有人路由器与VPN server已互联互通
3.快速生成一套证书给PC客户端
#创建客户端证书,common name可回车不填,这里与给路由器的证书不同,加强安全性一般要设密码,客户端通过证书+密码访问
[root@nginx easyrsa3]# ./easyrsa gen-req wanghb
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/client/easy-rsa/easyrsa3/pki/reqs/wanghb.req
key: /etc/openvpn/client/easy-rsa/easyrsa3/pki/private/wanghb.key
#导入客户端证书
[root@nginx easyrsa3]# cd /etc/openvpn/easy-rsa/easyrsa3/
[root@nginx easyrsa3]# ./easyrsa import-req /etc/openvpn/client/easy-rsa/easyrsa3/pki/reqs/wanghb.req wanghb
#签约客户端证书,输入登录密码
[root@nginx easyrsa3]# ./easyrsa sign client wanghb
Certificate created at: /etc/openvpn/easy-rsa/easyrsa3/pki/issued/wanghb.crt
#配置openvpn主配
[root@nginx easyrsa3]# cd /etc/openvpn/easy-rsa/easyrsa3/pki/
[root@nginx pki]# cp issued/younopass.crt /etc/openvpn/client/
[root@nginx pki]# cp /etc/openvpn/client/easy-rsa/easyrsa3/pki/private/younopass.key /etc/openvpn/client/
[root@nginx pki]# cd /etc/openvpn/client/
#下面的证书中wanghb.crt、wanghb.key、ca.crt用于用户wanghb登陆openvpn
[root@nginx client]# ls
ca.crt easy-rsa wanghb.crt wanghb.key younopass.crt younopass.key
4.pc客户端连接openvpn server
安装openvpn client过程略,自行去网上下载一个2.4版本的openvpn客户端即可,配置文件参考如下:
youren.ovpn
client
dev tun
;dev-node MyTap
;proto tcp
proto tcp
remote 202.107.226.118 55555
;remote-random
resolv-retry infinite
nobind
;user nobody
;group nobody
persist-key
persist-tun
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
;mute-replay-warnings
ca D:\soft\OpenVPN\config\youren\ca.crt
cert D:\soft\OpenVPN\config\youren\wanghb.crt
key D:\soft\OpenVPN\config\youren\wanghb.key
cipher AES-256-CBC
comp-lzo
verb 3
;mute 20
安装完成后,启动vpn客户端,输入密码连接
在这里插入图片描述

连接完成后,获取到了IP 10.8.0.9
在这里插入图片描述

tracert检测确认pc客户端与openvpn server连接成功

在这里插入图片描述

5.pc客户端测试访问摄像头
至此,我们整个环境都已经完成组网了,接下来测试pc客户端访问路由器客户端下面的摄像头
ping检测,保证ping通,tracert检测,保证走的VPN路由

在这里插入图片描述

验证摄像头web后台能不能打开,浏览器访问https://192.168.11.216
在这里插入图片描述

至此已经实现了,两个vpn客户端子网互通,远程访问摄像头后台地址的目的
六、调试过程
调试过程中,有以下关键的问题逐个解决了后才达到子网互通的目的
1.有人路由器连接vpn server配置
最终的配置参考以上第四节:有人路由器连接
关键点1:路由器作为客户端不能设置密码,没有填密码的地方
解决办法:服务器生成证书时不设置密码:./easyrsa gen-req younopass nopass
关键点2:需要lzo压缩加密传输,该配置项即使不勾选,客户端也能获取到client ip造成假连接,实际没有真正联通(这里厂商给的文档误导了)
在这里插入图片描述

关键点3:路由器作为客户端怎么固定获取到的IP地址
为了做端口映射,固定网络访问地址,获取到的客户端IP最好固定
解决办法:服务端创建ccd目录,把固定IP写到配置文件,服务端目录再指定ccd参数

在这里插入图片描述

如上设置指定了wanghb这个客户端获取到的IP固定为10.8.0.9,它在服务器的远端IP为10.8.0.10
2.VPN server连接客户端子网配置
客户端wan口连上VPN server以后,从逻辑上VPN server与路由器wan口是互联互通的,路由器wan口与lan口子网也是互联互通的
那么VPN server通到lan口子网需要相应的路由
关键点1:server上生成到子网的路由,这条路由不需要手动创
解决办法:在server的配置文件里push客户端子网的网段
!](https://i-blog.csdnimg.cn/direct/87e8871e87eb4c83a5e3c2976ee69d75.png)

在这里插入图片描述

这样到客户端子网就”有路走了“
在这里插入图片描述

3.客户端之间互相联通配置
多个客户端都连上了VPN server,理论上这些客户端都可以通过server这条通道互联,那么客户端上就要有去另一个客户端的路由
关键点1:客户端上生成去另一个客户端的路由,这条路由不需要手创
解决办法:server上的配置文件里route各个客户端子网的网段,该配置可以让客户端自动生成路由

在这里插入图片描述

这样客户端到其它客户端就”有路走了“,下图是有人路由器的路由表,可以看到去另一个客户端192.168.1.0的路由已生成

在这里插入图片描述

下图是windows pc的路由表,可以看到去摄像头客户端192.168.11.0的路由已生成
在这里插入图片描述

这些路由都会随着服务端和客户端的启动和关闭,自动生成和删除,断开VPN后不会把客户端的网络”搞乱“
七、实施部署
现场实施部署时,由于可能会存在很多很多个这样的客户端,如果不规划好网段各个路由会”打架“,出现找不到目的地址或目的地址冲突的问题
同时,规划网段,区别IP也会增加实施成本,如何规避这个问题?
1.端口映射的方法
使用端口映射的方法,利用客户端获取到client ip,例如:10.8.0.5和摄像头映射的外网口去访问摄像头。
这样就解决了大规模实施时终端IP冲突、网段冲突的问题,服务器上也不需要route/push很多个网段了,不同子网下摄像头的IP也可以一致
前面已经解决固定客户端IP的问题了,配置端口转发:
在这里插入图片描述

配置完成后可通过https://10.8.0.13:11443去访问,子网下192.168.1.172这个摄像头

在这里插入图片描述

可通过ssh admin@10.8.0.13 11222去ssh连接摄像头的操作系统
2.导入导出配置文件
由于已经解决了网段冲突,IP冲突的问题,每一个路由器客户端的区别配置就只有VPN私钥证书了(多个摄像头端口映射也有区别)
此时我们可以本地放一个同型号的路由器,本地把路由器配好导出配置文件,现场实施时再将配置文件导入,实施人员根据文档修改个别不同配置,达到快速部署的目的
路由器导出配置文件方法,生成备份:

在这里插入图片描述

生成一个压缩包

在这里插入图片描述

实施时,将这个配置文件导入即可
八、其它问题
1.组网能带多少个摄像头
取决于Openvpn服务器能带多少个客户端,Openvpn服务器的负载,以及给到客户端的地址池
另外客户端固定IP时ccd文件要求填写local ip和remote ip,这个地址对取值时有要求,也限制了客户端的数量
在这里插入图片描述

如果取到了不连续的IP,会有报错如下:
Thu Apr 01 18:39:57 2021 There is a problem in your selection of --ifconfig endpoints [local=10.8.0.7, remote=10.8.0.10]. The local and remote VPN endpoints must exist within the same 255.255.255.252 subnet. This is a limitation of --dev tun when used with the TAP-WIN32 driver. Try ‘openvpn --show-valid-subnets’ option for more info.
查阅资料后,得出如下取值对:
在这里插入图片描述

另外有人的路由器,每一个上限只能做15个端口转发,如果要使用端口转发的方式访问终端设备,也会受限于此
2.传输稳定问题
传输的稳定性取决于摄像头等终端设备与路由器客户端组网方式,一般有线比无线稳定,用无线时,距离远近也是主要影响因素。
路由器上外网的方式也会影响传输,4G卡插卡上网肯定相对网络波动比较大,插网线传输更加稳定。
传输速度取决于路由器上外网的带宽。

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值