很多时候需要从世界各地来访问公司服务器/电脑、工厂设备,实现方式有很多种,主要分为VPN和内网穿透方式;但是他们俩都存在一些问题,例如内网穿透主要利用外网IP,端口映射内网IP地址/端口方式,需要在设备端/电脑端装软件,例如frp方式需要在设备端安装客户端程序frpc,但是现实中很多设备不允许安装,例如工厂设备PLC或CNC设备,他们一般不会让安装frpc。所以内网穿透方式应用场景就比较局限。VPN相当于在现有网络建立一个虚拟网络,相对于内网穿透来说设备端无需在设备终端添加客户端程序,而是把客户端安装工作转移到用户侧,然后借助公网IP、路由器和服务器来实现外网方式内网,主要应用场景:外网调试升级工厂现场设备、外网访问校园网网站等等。
VPN的原理:
通常情况下,VPN网关采取双网卡结构,外网卡使用公网IP接入Internet。
网络一(假定为公网internet)的终端A访问网络二(假定为公司内网)的终端B,其发出的访问数据包的目标地址为终端B的内部IP地址。
网络一的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查,如果目标地址属于网络二的地址,则将该数据包进行封装,封装的方式根据所采用的VPN技术不同而不同,同时VPN网关会构造一个新VPN数据包,并将封装后的原数据包作为VPN数据包的负载,VPN数据包的目标地址为网络二的VPN网关的外部地址。
网络一的VPN网关将VPN数据包发送到Internet,由于VPN数据包的目标地址是网络二的VPN网关的外部地址,所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
网络二的VPN网关对接收到的数据包进行检查,如果发现该数据包是从网络一的VPN网关发出的,即可判定该数据包为VPN数据包,并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离,再将数据包反向处理还原成原始的数据包。
网络二的VPN网关将还原后的原始数据包发送至目标终端B,由于原始数据包的目标地址是终端B的IP,所以该数据包能够被正确地发送到终端B。在终端B看来,它收到的数据包就和从终端A直接发过来的一样。
从终端B返回终端A的数据包处理过程和上述过程一样,这样两个网络内的终端就可以相互通讯了。
今天主要讲三部分:
一.ubuntu 侧实现路由和服务功能
1.1.ubuntu开启软转发变成路由器。
1.2.ubuntu安装 服务
1.3 制作证书
1.4 配置的server.conf
二.客户端安装客户端
2.1下载open客户端
2.2 配置客户端
三.利用frp实现公网映射到ubuntu的IP地址和端口,来实现远程登录。
1.1 ubuntu开启软转发变成路由器
以ubuntu20.04版本(lan: eth0 连接设备,wan: enx00c2e56ae020 用来连接internet 一般dhcp方式)为例:
以用户登录,sudo su 到root用户
vim /etc/sysctl.conf 修改 ubuntu开启软转发变成路由器。
非永久修改:
sysctl -w net.ipv4.ip_forward=1
或者
echo 1 > /proc/sys/net/ipv4/ip_forward
修改完毕后,配置路由
iptables -A FORWARD -i eth0-o enx00c2e56ae020 -j ACCEPT
iptables -A FORWARD -i enx00c2e56ae020 -o eth0-m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o enx00c2e56ae020 -j MASQUERADE
修改完之后验证一下,使用设备或PC插入网线插入LAN口(本机LAN自带dhcp服务),然后ping www.baidu.com看看能否上网。
1.2 ubuntu安装下 服务
1.apt-get update 先更新下,然后执行
2.apt-get install open 测试成功 open –version
3.apt-get install libssl-dev ssl相关库
4.apt-get install openssl openssl相关
5.apt-get -y install easy-rsa 制作证书相关 查看easy-rsa安装的文件,如下:
dpkg -L easy-rsa |more
安装完毕后开始制作三个证书CA,SERVER,CLIENT
1.3 制作证书
1.CA证书:
我们需要在/etc/open/目录下创建easy-rsa文件夹,如下:
mkdir /etc/open/easy-rsa/
然后把/usr/share/easy-rsa/目录下的所有文件全部复制到/etc/open/easy-rsa/下,如下:
sudo cp -r /usr/share/easy-rsa/* /etc/open/easy-rsa/
修改如下相关选项内容即可。如下:
sudo vi /etc/open/easy-rsa/vars
export KEY_COUNTRY=”CN”
export KEY_PROVINCE=”NJ”
export KEY_CITY=”nanjing”
export KEY_ORG=”nangao”
export KEY_EMAIL=”[email protected]”
export KEY_OU=”yangxd” //客户端
export KEY_NAME=”yangxd” //服务端用的
然后使用source vars命令使其生效,如下:
source vars 生效
./clean-all 清空
开始制作CA 执行./build-ca
在keys目录下存在如下ca.crt ca.key两个文件
2.SERVER证书
同理:执行./build-key-server yangxd yangxd等同CA的KEY_NAME ,一路回车,直到选择Y/N都选Y
现在再为服务器生成加密交换时的Diffie-Hellman文件,如下:
./build-dh 最终生产dh2048.pem
3.CLIENT证书
同理:./build-key yangxd yangxd等同CA的KEY_OU,一路回车,直到选择Y/N都选Y
自此证书都生成完毕了。
1.4 配置的server.conf
所有证书制作完毕后,我们现在开始配置Server端。Server端的配置文件,我们可以从open自带的模版中进行复制。如下:
cp /usr/share/doc/open/examples/sample-config-files/server.conf.gz /etc/open/
cd /etc/open/ 使用如下命令:gzip -d server.conf.gz
修改如下东西
port 1194 //监听端口
proto tcp //修改成TCP
dev tun //接口名称
ca ca.crt //CA证书
cert yangxd.crt //服务器证书
key yangxd.key //服务器密钥
dh dh2048.pem //加密交换时的Diffie-Hellman文件
server 10.8.0.0 255.255.255.0 //VPN建立时IP地段
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status open-status.log
verb 3
push "route 192.168.10.0 255.255.255.0" //很重要-------添加内网到路由中
配置完毕后查看
至此,配置完毕,开始启动服务
修改 vim /lib/systemd/system/open.service ExeStart指向内容可能会出现,修改如下
然后使用systemctl daemon-reload 修改生效,
然后执行systemctl start open,systemctl status open查看
状态为running表示成功,如果不成功,请多次执行systemctl stop open或者kill -9 占用1194端口进程号。
支持 服务器搭建完毕。