wsl下的Ubuntu安装openVPN

  1. 安装openVPN
 apt install openvpn
  1. 安装EasyRSA
 libb@libingbing:~$ sudo wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.2/EasyRSA-3.1.2.tgz
 libb@libingbing:~$ sudo tar -zxvf EasyRSA-3.1.2.tgz
 libb@libingbing:~$ sudo mkdir /etc/openvpn/easy-rsa
 libb@libingbing:~$ sudo cp -r EasyRSA-3.1.2/* /etc/openvpn/easy-rsa
  1. 生成证书前修改EasyRSA的配置文件vars
libb@libingbing:~$ cd /etc/openvpn/easy-rsa/
libb@libingbing:/etc/openvpn/easy-rsa$ cp vars.example vars
libb@libingbing:/etc/openvpn/easy-rsa$ vim vars

在这里插入图片描述

  1. 清理原有证书和私钥并初始化
 libb@libingbing:/etc/openvpn/easy-rsa$ ./easyrsa clean-all
  1. 生成CA根证书
libb@libingbing:/etc/openvpn/easy-rsa$ ./easyrsa build-ca


CA根证书生成位置:/etc/openvpn/easy-rsa/pki/ca.crt

  1. 生成服务器端证书和私钥
libb@libingbing:/etc/openvpn/easy-rsa$ ./easyrsa build-server-full server nopass

在这里插入图片描述
服务端证书路径:/etc/openvpn/easy-rsa/pki/issued/server.crt
服务端私钥路径:/etc/openvpn/easy-rsa/pki/private/server.key

创建TLS认证密钥:这个密钥由openvpn主程序生成,起作用是用密钥取代密码输入

libb@libingbing:/etc/openvpn/easy-rsa$ openvpn --genkey secret ta.key

ta.key路径:/etc/openvpn/easy-rsa/ta.key

生成Diffie-Hellman算法需要的密钥文件;

libb@libingbing:/etc/openvpn/easy-rsa$ ./easyrsa gen-dh

生成CRL密钥 :CRL(证书撤销列表)密钥用于撤销客户端密钥。如果服务器上有多个客户端证书,希望删除某个密钥,那么只需使用./easyrsa revoke NAME这个命令撤销即可

libb@libingbing:/etc/openvpn/easy-rsa$ ./easyrsa gen-crl

这两个密钥有没有都是可以使用的

拷贝私钥、公钥和证书等文件到server.conf同级目录下
必须拷贝的文件包括ca.crt、ca.key、server.crt、server.key、ta.key

 libb@libingbing:/etc/openvpn/server$ cd ../server
 libb@libingbing:/etc/openvpn/server$ cp /etc/openvpn/easy-rsa/pki/ca.crt .
 libb@libingbing:/etc/openvpn/server$ cp /etc/openvpn/easy-rsa/pki/private/ca.key .
 libb@libingbing:/etc/openvpn/server$ cp /etc/openvpn/easy-rsa/pki/issued/server.crt .
 libb@libingbing:/etc/openvpn/server$ cp /etc/openvpn/easy-rsa/pki/private/server.key .
 libb@libingbing:/etc/openvpn/server$ cp /etc/openvpn/easy-rsa/ta.key .
 libb@libingbing:/etc/openvpn/server$ cp /etc/openvpn/easy-rsa/pki/dh.pem .
 libb@libingbing:/etc/openvpn/server$ cp /etc/openvpn/easy-rsa/pki/crl.pem .
  1. 生成客户端证书和私钥
    在服务端生成客户端的证书和私钥,每多一个客户端就要多生成一份
libb@libingbing:/etc/openvpn/easy-rsa$ ./easyrsa build-client-full client nopass

在这里插入图片描述
客户端证书路径:/etc/openvpn/easy-rsa/pki/issued/client.crt
客户端私钥路径:/etc/openvpn/easy-rsa/pki/private/client.key
8. OpenVPN服务端配置

libb@libingbing:/etc/openvpn/server$ vim server.conf
port 1194                              #openvpn 客户端链接端口 可以自自己修改
dev tun                                #指定OpenVPN创建的通信隧道类型。 tun 将会创建一个路由IP隧道
ca ca.crt                              #根证书的位置,和本配置文件在同一目录
cert server.crt                        #服务端证书的位置,和本配置文件在同一目录
key server.key                         #服务端证书密钥位置,和本配置文件在同一目录
crl-verify crl.pem                     #CRL密钥位置,和本配置文件在同一目录
dh dh.pem                              #Diffie-Hellman算法密钥文件位置,和本配置文件在同一目录
tls-auth ta.key                        #TLS认证密钥位置,和本配置文件在同一目录
cipher BF-CBC                          #加密方式:BF-CBC AES-256-CBC AES-256-GCM 选一个就行
client-to-client                       ##允许客户端与客户端之间通信
proto tcp                              #TCP 还是 UDP 协议方式链接服务器可以根据自己情况来
server 10.8.0.0 255.255.255.0          #VPN所用网段,不能和内网冲突推荐默认
push "route 192.168.1.0  255.255.255.0" #连接VPN的内网网段

在这里插入图片描述

启动服务端

libb@libingbing:/etc/openvpn/server$ openvpn --config server.conf
  1. OpenVPN客户端配置
    将生成的客户端证书(client.crt)和密钥(client.key)、以及上面生成的根证书(ca.crt)、TLS认证密钥(ta.key)放到要配置的客户端中相应位置,然后同一目录下创建客户端配置文件,文件名就是客户端名称例如client.conf
libb@libingbing:/usr/local/sbin$ cd /etc/openvpn/client
libb@libingbing:/etc/openvpn/client$ sudo vim client.conf

在这里插入图片描述

client                        #指定当前VPN是客户端
dev tun                       #使用tun隧道传输协议
proto tcp                     #使用tcp协议传输数据 需要跟服务端保持一致 要么都tcp要么都udp
remote 123.123.123.123        #openvpn服务器IP地址 端口号默认1194
resolv-retry infinite         #断线自动重新连接,在网络不稳定的情况下非常有用                           
nobind                        #不绑定本地特定的端口号
persist-key                   #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun                   #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
ca ca.crt                     #指定根证书的文件路径
cert client.crt               #指定客户端证书路径
key client.key                #指定客户端密钥位置
remote-cert-tls server        #要求客户端只接受由服务器签名的有效证书。这种配置可以提供额外的安全性,确保客户端只连接到经过验证的服务器
tls-crypt ta.key 1            #启用 OpenVPN 的 TLS-Crypt 功能,它会对所有的数据包进行加密与认证。“ta.key” 是一个预共享密钥,是用来加密和认证 OpenVPN 通信流量的。1:这个数字是指启用 tls-crypt。                       
cipher AES-256-GCM            #指定 OpenVPN 加密算法为 AES-256-GCM,这是一个高强度加密算法,可以提供很好的安全性和性能。需与服务端一致
auth SHA256                   #指定 OpenVPN 认证算法为 SHA256,用于验证数据包的完整性和真实性
key-direction 1               #指定 OpenVPN 加密密钥的方向为 1,表示采用单向加密模式,即所有流量的加密和解密都是由客户端的本地处理。
verb 3                        #指定日志文件的记录详细级别,0-9,等级越高日志内容越详细

启动客户端服务

libb@libingbing:/etc/openvpn/client$ openvpn --config client.conf
  1. 在Windows配置openVPN客户端
    Windows上客户端配置文件后缀改为ovpn,文件名为client.ovpn内容如下:
client					#指定当前VPN是客户端
dev tun                 #使用tun隧道传输协议
proto tcp				#使用tcp协议传输数据 需要跟服务端保持一致 要么都tcp要么都udp
ca ca.crt				#指定根证书的文件路径
cipher BF-CBC			#指定 OpenVPN 加密算法为 BF-CBC,与服务端一致
cert client.crt			#指定客户端证书路径
key client.key          #指定客户端密钥位置
persist-key				#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun             #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
tls-auth ta.key			#启用 OpenVPN 的 TLS-Crypt 功能,它会对所有的数据包进行加密与认证。“ta.key” 是一个预共享密钥,是用来加密和认证 OpenVPN 通信流量的。
remote-cert-tls server  #要求客户端只接受由服务器签名的有效证书。这种配置可以提供额外的安全性,确保客户端只连接到经过验证的服务器
#auth-user-pass			#密码验证
verb 3					#指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
remote  192.168.126.146 #openvpn服务器IP地址 端口号默认1194

在这里插入图片描述重新生成一份客户端证书和密钥,并连同根证书,TLS认证密钥,客户端配置文件放到Windows版客户端的配置目录下,如下图:
在这里插入图片描述
我这里在config目录下新建一个文件夹名字就是客户端名称,将以上5个文件放到这一目录下
启动客户端连接服务端
在这里插入图片描述
在这里插入图片描述
走到分配IP这一步就是连上了,屏幕右下角小电脑变成绿色。
在这里插入图片描述

  1. 安卓手机上配置openVPN客户端
    将Windows的配置文件和另外四个文件放到手机里
    打开手机客户端,导入四个文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

点击connect,也可以连上。
由于没有另外生成一份客户端证书和密钥,所以手机连接之前,Windows端先断开,不然两个名称的客户端会互相挤掉,两个都不断被挤,又重连

  1. 配置nat转发
    配置nat转发的目的是能够将让openVPN内连接的客户端可以通过服务端上网

第一步:开启IP转发:
临时修改生效:

echo "1" > /proc/sys/net/ipv4/ip_forward

永久修改

sudo vim /etc/sysctl.conf

去掉注释

 net.ipv4.ip_forward=1

第二步:编写 iptables 规则

 sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
 sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
 sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

解释如下:
eh0是外部网络接口连接互联网,eth1是内部网络接口连接vpn构建的内网

sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo: 表示以超级用户权限执行该命令。
-A FORWARD: 添加一个规则到 FORWARD 链。FORWARD 链用于处理通过网络接口的数据包,当数据包从一个接口转发到另一个接口时。
-i eth1: 这表示数据包从 eth1 网络接口进入。
-o eth0: 这表示数据包要输出到 eth0 网络接口。
-j ACCEPT: 这表示接受(允许)该数据包。

sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
-m state: 这是一个模块,用于基于数据包的状态来匹配数据包。
–state ESTABLISHED,RELATED: 这表示只接受已建立或与现有连接相关的数据包。这样可以允许已建立连接的数据包在两个网络之间传递,而不允许未知或新的连接。
其他参数与第一个命令相同:从 eth0 接口到 eth1 接口的数据包将被接受。

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
-t nat: 指定我们要操作的是 NAT(网络地址转换)表。
-A POSTROUTING: 在 POSTROUTING 链中添加一个规则。POSTROUTING 链用于在决定路由数据包之前对其进行处理。
-s 192.168.0.0/24:需要转发的内网网段 这里指的是VPN内网网段
-o eth0: 表示数据包将从 eth0 网络接口输出。
-j MASQUERADE: 表示使用 MASQUERADE 动作。MASQUERADE 动作允许从本机发出的数据包使用本机的 IP 地址进行源地址转换,这样,当数据包离开本机时,它会使用本机的 IP 地址作为源地址发送出去。这通常用于动态 IP 地址分配的情况,例如在使用拨号上网或使用 DHCP 时。

13.后台启动

libb@libingbing:/mnt/c/WINDOWS/system32$ sudo openvpn --cd /etc/openvpn/server --daemon --config server.conf
libb@libingbing:/mnt/c/WINDOWS/system32$ ps -ef|grep openvpn
root      1229  1086  0 17:00 ?        00:00:00 openvpn --cd /etc/openvpn/server --daemon --config server.conf
libb      1231  1087  0 17:00 pts/2    00:00:00 grep --color=auto openvpn
  1. 作为服务启动
libb@libingbing:/etc/openvpn/server$ sudo service openvpn start
libb@libingbing:/etc/openvpn/server$ ps -ef|grep openvpn
libb      3870  3599  0 11:40 pts/2    00:00:00 grep --color=auto openvpn

没起来,原因是 /etc/init.d/openvpn 这个脚本中配置文件路径不对,原来是
在这里插入图片描述
而我实际是/etc/openvpn/server,改过来就好了。搜了一天也没找到原因,搜Ubuntu配置开机启动的时候无意中发现已经有这个配置文件了,只是配置文件路径不对!

  1. 添加到开机启动
    /etc/init.d/ 目录下的脚本都是系统安装的程序的服务脚本。例如:/etc/init.d/openvpn 就是openvpn的服务脚本 用命令service openvpn start就能启动openvpn.
    执行命令 sudo update-rc.d myscript defaults 就能将openvpn添加到开机启动,前提是openvpn有执行权限,最好先执行一下添加执行权限的命令 sudo chmod +x /etc/init.d/openvpn

参考文档:
https://blog.csdn.net/QAZ600888/article/details/129883353?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%80%8E%E4%B9%88%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AAvpn%E6%9C%8D%E5%8A%A1%E5%99%A8&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-6-129883353.142v99pc_search_result_base7&spm=1018.2226.3001.4187

https://blog.csdn.net/rockage/article/details/127190263?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-127190263-blog-130324204.235%5Ev40%5Epc_relevant_3m_sort_dl_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-127190263-blog-130324204.235%5Ev40%5Epc_relevant_3m_sort_dl_base1&utm_relevant_index=9

https://blog.csdn.net/qq_54952827/article/details/130324204?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170467588416800186511094%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=170467588416800186511094&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-130324204-null-null.142v99pc_search_result_base7&utm_term=%E6%80%8E%E4%B9%88%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AAvpn%E6%9C%8D%E5%8A%A1%E5%99%A8&spm=1018.2226.3001.4187

https://blog.csdn.net/weixin_42474071/article/details/134492965?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-134492965-blog-129883353.235%5Ev40%5Epc_relevant_3m_sort_dl_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-134492965-blog-129883353.235%5Ev40%5Epc_relevant_3m_sort_dl_base1&utm_relevant_index=2

https://blog.csdn.net/qq_37510195/article/details/130777785?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170485079716777224419657%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=170485079716777224419657&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-130777785-null-null.142v99pc_search_result_base7&utm_term=openVpn&spm=1018.2226.3001.4187

这个看起来最简洁,没有试
https://blog.csdn.net/weixin_57228276/article/details/130450349?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-130450349-blog-134518256.235%5Ev40%5Epc_relevant_3m_sort_dl_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-130450349-blog-134518256.235%5Ev40%5Epc_relevant_3m_sort_dl_base1&utm_relevant_index=8
openvpn源码下载gitcode:https://gitcode.com/OpenVPN/openvpn-build/blob/master/release/README.md
openvpn源码下载github:https://github.com/OpenVPN/openvpn https://github.com/OpenVPN/easy-rsa/releases

分享一个下载openVPN安卓客户端的地址:https://www.apk20.com/search/OpenVPN%20Connect
分享一个下载openVPNwindows客户端的地址:https://www.filehorse.com/download-openvpn-64/download/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值