Openvpn构建线上局域网

前提条件

  • 一条公网ip
  • 局域网内部一台服务器A
  • 公网绑定到A

局域网架构及原理

  • vpn原理:与ssl协议类似,ssl协议是将443端口加密,vpn是对client到server整个链路加密
  • openvpn原理:使用虚拟网卡技术,将局域网ip段映射到client端,在client访问时局域网内机器拦截虚拟网卡数据包由server端真实网卡转发出去,实现client到局域网内的访问


    image.png

Openvpn搭建

参考大佬链接,搭建没有问题,在调试阶段不对 CentOS 7 搭建OpenVPN服务器_Centos7搭建vpn | abcdocker运维博客 (i4t.com)

1、证书制作

1.1、安装制作证书工具
mkdir /data/tools -p  #创建工作目录
wget -P /data/tools http://down.i4t.com/easy-rsa.zip
unzip -d /usr/local /data/tools/easy-rsa.zip
1.2、修改变量
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
vim vars
export KEY_COUNTRY="cn"
export KEY_PROVINCE="BJ"
export KEY_CITY="BJ"
export KEY_ORG="abcdocker"
export KEY_EMAIL="cyh@i4t.com"
export KEY_CN=abc
export KEY_NAME=abc
export KEY_OU=abc


#初始化环境边看
source vars
./clean-all
 
#注意:执行clean-all命令会在当前目录下创建一个名词为keys的目录如果存在会删除内容
1.3、创建根证书
./build-ca
 
# 生成根证书ca.crt和根密钥ca.key
#因为在vars中填写了证书的基本信息,所以这里一路回车即可
1.4、创建服务端证书
#为服务端生成证书和密钥
#一直回车,2个Y
 ./build-key-server server

 ....
An optional company name []:
Using configuration from /usr/local/easy-rsa-old-master/easy-rsa/2.0/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'cn'
stateOrProvinceName   :PRINTABLE:'BJ'
localityName          :PRINTABLE:'BJ'
organizationName      :PRINTABLE:'abcdocker'
organizationalUnitName:PRINTABLE:'abc'
commonName            :PRINTABLE:'abc'
name                  :PRINTABLE:'abc'
emailAddress          :IA5STRING:'cyh@i4t.com'
Certificate is to be certified until Jan 31 14:01:35 2030 GMT (3650 days)
Sign the certificate? [y/n]:y
 
 
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
1.5、制作client端证书
#每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
#为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key client1
./build-key client2

每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只可以一个客户端连接(可以修改配置文件)

1.6、现在为服务器生成加密交换时的Diffie-Hellman文件

生成过程比较慢,在此期间不要去中断它

./build-dh
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
1.7、创建完成后证书目录如下
[root@abc01 2.0]# ll keys
total 84
-rw-r--r-- 1 root root 7997 Feb  3 09:01 01.pem
-rw-r--r-- 1 root root 7880 Feb  3 09:09 02.pem
-rw-r--r-- 1 root root 7997 Feb  3 09:01 abc.crt
-rw-r--r-- 1 root root 1765 Feb  3 09:01 abc.csr
-rw------- 1 root root 3272 Feb  3 09:01 abc.key
-rw-r--r-- 1 root root 2293 Feb  3 09:01 ca.crt
-rw------- 1 root root 3272 Feb  3 09:01 ca.key
-rw-r--r-- 1 root root  424 Feb  3 09:06 dh2048.pem
-rw-r--r-- 1 root root  211 Feb  3 09:09 index.txt
-rw-r--r-- 1 root root   21 Feb  3 09:09 index.txt.attr
-rw-r--r-- 1 root root   21 Feb  3 09:01 index.txt.attr.old
-rw-r--r-- 1 root root  105 Feb  3 09:01 index.txt.old
-rw-r--r-- 1 root root    3 Feb  3 09:09 serial
-rw-r--r-- 1 root root    3 Feb  3 09:01 serial.old
-rw-r--r-- 1 root root 7880 Feb  3 09:09 test.crt
-rw-r--r-- 1 root root 1765 Feb  3 09:09 test.csr
-rw------- 1 root root 3272 Feb  3 09:09 test.key

2、openvpn server端安装配置

2.1、安装
yum install -y openvpn
2.2、配置服务端
2.2.1、生成tls-auth key并将其拷贝到证书目录中
openvpn --genkey --secret ta.key
2.2.2、证书位置移动
mv ./ta.key /etc/openvpn/keys/
cp /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/{server.crt,server.key,ca.crt,dh2048.pem} /etc/openvpn/keys/

#验证
[root@k8s-01 ~]# ll /etc/openvpn/keys/
total 24
-rw-r--r-- 1 root root 2342 Feb  3 12:48 ca.crt
-rw-r--r-- 1 root root  424 Feb  3 12:48 dh2048.pem
-rw-r--r-- 1 root root 8089 Feb  3 12:48 server.crt
-rw------- 1 root root 3272 Feb  3 12:48 server.key
-rw------- 1 root root  636 Feb  3 12:47 ta.key
2.2.3、服务端配置文件
touch /etc/openvpn/server.conf

vim /etc/openvpn/server.conf

port 1194       #openVPN端口
proto tcp       #tcp连接
dev tun         #生成tun0虚拟网卡
 
ca keys/ca.crt      #相关证书配置路径(可以修改为全路径/etc/openvpn/keys)
cert keys/server.crt
key keys/server.key  # This file should be kept secret
dh keys/dh2048.pem
 
server 10..0.0 255.255.255.0   #默认虚拟局域网网段,不要和实际的局域网冲突就可以
ifconfig-pool-persist ipp.txt     
 
push "route 192.168.10.0 255.255.255.0"    #可以通过局域网内的ip路由的映射到客户端
client-to-client                 #如果客户端都是用一个证书和密钥连接VPN,需要打开这个选项
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
 
persist-key
persist-tun
 
status /var/log/openvpn/openvpn-status.log   #状态日志路径,路径要存在
log-append  /var/log/openvpn/openvpn.log     #运行日志
verb 3                      #调试信息级别
2.2.4、服务端启动
openvpn --daemon --config /etc/openvpn/server.conf  
#如果有问题根据/var/log/openvpn/ 下的日志排错,一般是不会有问题的

启动成功会多一个 tun0的虚拟网卡


image.png
2.2.5、client端配置

要导出对应的client端key 根证书 ca.crt,client.crt,client.key,ta.key

client
dev tun
proto tcp
remote 192.168.0.10 1194    #openvpn服务器的外网IP和端口(可以写多个做到高可用)
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt         #用户的证书
key client1.key
 
tls-auth ta.key 1
cipher AES-256-CBC
comp-lzo
verb 3
2.2.6、client 链接测试

安装client http://down.i4t.com/openvpn-install-2.4.7-I606-Win10.exe

配置如下


image.png
2.2.7、链接问题排错

如果一直链接不上请确认

  • 服务存活情况
  • 安全组(服务商提供的)端口是否放开
  • iptables防火墙端口是否放开

我是在安全组卡了很久,这两只是client 与服务端链接成功,说明我们搭建openvpn已经完成了
这时已经可以直接登录到server端;

4、说明

到这我们搭建openvpn已经完成了
这时已经可以直接登录到server端,但是无法登录局域网内的其他机器,因为server端未开转发
开转发还会遇到安全组问题,因此要使用SNAT替换访问的ip

3、iptables转发设置

参考链接基础知识Iptables - 简书 (jianshu.com)

3.1、开启内核转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1   #将此行写入配置文件,开启ipv4转发
sysctl -p     #读取修改后的配置
3.2、iptables配置
#将客户端的虚拟ip 10.8.0.0网段的ip替换为局域网内服务端服务器的ip
iptables -A POSTROUTING -t nat  -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.10.127

Troubleshooting

工具使用tcpdump 监听网卡 参考链接 tcpdump详细教程 - 简书 (jianshu.com)
#监听tun0网卡上访问 192.168.10.118数据
tcpdump -n -i tun0 host 192.168.10.118

在客户端ping ,发现有去无会,一看ip都是10.8.x.x 肯定无法过安全组,因此用iptables替换ip,整个服务就可用了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容