用openvp*组建一个vp* server连通企业局域网 解决在家远程办公(不是FQ不要封我)

第一章 目标

由于疫情影响,需要在家远程办公,但公司服务都在内网,也没有公网IP,使用起来诸多不便。服务放在云上又被黑了,刚好这几天无事,索性就自己动手搭建一个企业vp*,安全又方便。

第二章 工具

1.由于没有公网IP,就用向日葵在小米路由器DDNS上搞了一个域名来解决,这个很简单不是重点就不说了。

2.在内网的一台IP为192.168.100.100的机器上安装vp* server端,系统为centOS7。

3.使用openvp*做服务端和客户端,easy-rsa解决证书问题。

第三章 过程

准备工作1.开启内核中的ipv4转发 vim /etc/sysctl.conf 加入 net.ipv4.ip_forward = 1

sysctl --system  #查看加上没

用openvp*组建一个vp* server连通企业局域网 解决在家远程办公(不是FQ不要封我)_第1张图片

准备工作2.将文件拷贝到指定位置

cp /usr/share/doc/open*/sample/sample-config-files/server.conf /etc/open/server/

备个份 cp /etc/open/server/server.conf  /etc/open/server/server.conf.bak 

 

开始进入正题:

1.yum install -y open easy-rsa   #下载这两个工具,依赖epel

2.cd /usr/share/easy-rsa/3.0.7    #我是3.0.7版本

3../easyrsa init-pki    #初始化pki结构

4../easyrsa build-ca     #会要求输个密码,给后面两步用

5../easyrsa build-server-full server1 nopass     #输入上一步设置的密码

6../easyrsa build-client-full client1 nopass       #输入上一步设置的密码

7../easyrsa gen-dh     #生成DH需要等待一段时间

8.openvon --genkey --secret ./pki/ta.key    #这一步可忽略,后期在server.conf注释掉

9.cp -pR /usr/share/easy-rsa/3.0.7/pki/{issued,private,ca.crt,dh.pem,ta.key} /etc/open/server/   #将文件拷贝到open的server.conf所在的位置

10.vim /etc/open/server/server.conf   #修改配置文件,需要修改下面几项,配置详解在文章尾部

# line 78: specify certificates

ca ca.crt

cert issued/server1.crt

key private/server1.key


# line 85: specify DH file

dh dh.pem


# line 143: uncomment and change to your local network

push "route 192.168.100.0 255.255.255.0"  # server 所在的网段


# line 244: specify TLS-Auth key

;tls-auth ta.key   #没生成加;注释掉


# line 296: change log path

log         /var/log/open.log

log-append  /var/log/open.log

11.systemctl enable [email protected]    #注册服务

12.systemctl start [email protected]     #启动

13.查看服务端启动日志没报错,并且出现·Initialization Sequence Completed·即说明成功。

 

14.官网下载并安装open客户端

用openvp*组建一个vp* server连通企业局域网 解决在家远程办公(不是FQ不要封我)_第2张图片

15.将ca.crt  /issued/client1.crt  /private/client1.key   ta.key(没有则不要)  四个文件从服务端下载下来,并且放到open客户端的config文件夹下。

16.将open客户端的sample-config文件下的client.o样例拷贝到config文件下,并修改如下字段:

remote xxxx( server的域名或静态ip) 1194

ca ca.crt

cert client1.crt

key client1.key 

#tls-auth ta.key 1

#comp-lzo  与服务端一致,服务端没开这里注释

17.放一个配好的图,这里我改了crt和key的名字,remote用的域名

用openvp*组建一个vp* server连通企业局域网 解决在家远程办公(不是FQ不要封我)_第3张图片

18.配置完之后,启动客户端,连接成功。(需要注意在路由器管理页面打开1194的端口转发,这里选udp

用openvp*组建一个vp* server连通企业局域网 解决在家远程办公(不是FQ不要封我)_第4张图片

19.连上手机热点WiFi,模拟外网,并且ping 192.168.100.100成功

用openvp*组建一个vp* server连通企业局域网 解决在家远程办公(不是FQ不要封我)_第5张图片

20.单机至此结束。但如果要ping内网其他机器,例如192.168.100.102或192.168.100.103等机器发现还是不通,这时候需要在102和103的机器上加上这句话 route add -net 10.8.0.0/24 gw 192.168.100.100

原因是内网机器上没有返回给的包导致一直不通,需要在内网被连接的机器上添加路由,10.8.0.0/24为的网段地址,192.168.100.100 为server的内网地址,win客户端下添加方式:route add 10.8.0.0 mask 255.255.255.0 192.168.100.100

21.这次是真的结束了。

 

第三章 排查问题

1.解决问题主要是查看客户端日志和服务端日志,日志非常详细且重要,中间出现几个小问题,例如客户端配置了comp-lzo服务端没配、服务端往客户端push路由出错等都是在日志中发现并解决。

2.服务端日志路径:/var/log/open.log自己配的

3.客户端日志路径:openVPN客户端的log文件夹下面

第四章 open配置文件详解

配置文件详解原文参考链接:https://www.ilanni.com/?p=9847

;local a.b.c.d

定义open监听的IP地址,如果是服务器单网卡的也可以不注明,但是服务器是多网卡的建议注明。

port 1194

定义open监听的的端口,默认为1194端口。

proto tcp

;proto udp

定义open使用的协议,默认使用UDP。如果是生产环境的话,建议使用TCP协议。

dev tun

;dev tap

定义open运行时使用哪一种模式,open有两种运行模式一种是tap模式,一种是tun模式。

tap模式也就是桥接模式,通过软件在系统中模拟出一个tap设备,该设备是一个二层设备,同时支持链路层协议。

tun模式也就是路由模式,通过软件在系统中模拟出一个tun路由,tun是ip层的点对点协议。

具体使用哪一种模式,需要根据自己的业务进行定义。

ca ca.crt

定义open使用的CA证书文件,该文件通过build-ca命令生成,CA证书主要用于验证客户证书的合法性。

cert ilanni.crt

定义open服务器端使用的证书文件。

key ilanni.key

定义open服务器端使用的秘钥文件,该文件必须严格控制其安全性

dh dh2048.pem

定义Diffie hellman文件。

server 10.8.0.0 255.255.255.0

定义open在使用tun路由模式时,分配给client端分配的IP地址段。

ifconfig-pool-persist ipp.txt

定义客户端和虚拟ip地址之间的关系。特别是在open重启时,再次连接的客户端将依然被分配和断开之前的IP地址。

;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

定义open在使用tap桥接模式时,分配给客户端的IP地址段。

;push “route 192.168.10.0 255.255.255.0”

向客户端推送的路由信息,假如客户端的IP地址为10.8.0.2,要访问192.168.10.0网段的话,使用这条命令就可以了。

;client-config-dir ccd

这条命令可以指定客户端IP地址。

使用方法是在/etc/open/创建ccd目录,然后创建在ccd目录下创建以客户端命名的文件。比如要设置客户端 ilanni为10.8.0.100这个IP地址,只要在 /etc/open/ccd/ilanni文件中包含如下行即可:

ifconfig-push 10.8.0.200 255.255.255.0

push “redirect-gateway def1 bypass-dhcp”

这条命令可以重定向客户端的网关,在进行FQ时会使用到。

;push “dhcp-option DNS 208.67.222.222”

向客户端推送的DNS信息。

假如客户端的IP地址为10.8.0.2,要访问192.168.10.0网段的话,使用这条命令就可以了。如果有网段的话,可以多次出现push route关键字。同时还要配合iptables一起使用。

client-to-client

这条命令可以使客户端之间能相互访问,默认设置下客户端间是不能相互访问的。

duplicate-cn

定义open一个证书在同一时刻是否允许多个客户端接入,默认没有启用。

keepalive 10 120

定义活动连接保时期限

comp-lzo

启用允许数据压缩,客户端配置文件也需要有这项。

;max-clients 100

定义最大客户端并发连接数量

;user nobody

;group nogroup

定义open运行时使用的用户及用户组。

persist-key

通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys。

persist-tun

通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的。否则网络连接,会先linkdown然后再linkup。

status open-status.log

把open的一些状态信息写到文件中,比如客户端获得的IP地址。

log open.log

记录日志,每次重新启动open后删除原有的log信息。也可以自定义log的位置。默认是在/etc/open/目录下。

;log-append open.log

记录日志,每次重新启动open后追加原有的log信息。

verb 3

设置日志记录冗长级别。

;mute 20

重复日志记录限额

client端的配置文件如下:

client

定义这是一个client,配置从server端pull拉取过来,如IP地址,路由信息之类,Server使用push指令推送过来。

dev tun

定义open运行的模式,这个地方需要严格和Server端保持一致。

proto tcp

定义open使用的协议,这个地方需要严格和Server端保持一致。

remote 192.168.1.8 1194

设置Server的IP地址和端口,这个地方需要严格和Server端保持一致。

如果有多台机器做负载均衡,可以多次出现remote关键字。

;remote-random

随机选择一个Server连接,否则按照顺序从上到下依次连接。该选项默认不启用。

resolv-retry infinite

始终重新解析Server的IP地址(如果remote后面跟的是域名),保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址。这样无需人为重新启动,即可重新接入VPN。

nobind

定义在本机不邦定任何端口监听incoming数据。

persist-key

persist-tun

ca ca.crt

定义CA证书的文件名,用于验证Server CA证书合法性,该文件一定要与服务器端ca.crt是同一个文件。

cert laptop.crt

定义客户端的证书文件。

key laptop.key

定义客户端的密钥文件。

ns-cert-type server

Server使用build-key-server脚本生成的,在x509 v3扩展中加入了ns-cert-type选项。防止client使用他们的keys + DNS hack欺骗 client连接他们假冒的VPN Server,因为他们的CA里没有这个扩展。

comp-lzo

启用允许数据压缩,这个地方需要严格和Server端保持一致。

verb 3

设置日志记录冗长级别。

 

 

 

到这里整个过程就完成了,又可以愉快的在家办公了。。了。哈哈。。。

你可能感兴趣的:(运维,运维,服务器,centos,经验分享)