OpenVPN不多作解释,无论大小型企业、学校都可能会用到,多种身份验证方式以及传输的加密方式无疑比其它PVN应用面更广,除了供用户拨入企业/学校内部进行联网,还可以在企业与子公司之间进行加密传输,OpenVPN能实现二/三层的基于隧道的传输,再配合企业内部的不同Vlan,能实现很多复杂的功能。
(图片来源于互联网)
----------------------2024更新分割线------------------------------
最近因为一些原因,又需要折腾OpenVPN,发现原来写的脚本是真丑陋,特别是参考github上一些大神写的优美代码,功能实现方式简直......
所以重新写了一下,可复制以下代码执行:
wget https://github.com/qiguang0920/firstproject/raw/master/OpenVPN.sh && chmod +x OpenVPN.sh && /usr/bin/bash OpenVPN.sh
客户端配置文件生成参考了github上其它大神的方式,脚本运行过程中生成所需证书文件,支持Redhat系的Linux,如CentOS/Rocky/AlmaLinux
客户端下载地址:https://openvpn.net/client/client-connect-vpn-for-windows/
1、如果脚本执行过程中所有选项一路回车,会默认 UDP/1194端口/开启redirect-gateway全局转发,生成一个名为Client.ovpn的配置文件。
2、不允许多用户使用同一配置文件同时登录,多用户请使用脚本生成多个客户端配置文件。
3、脚本不支持配置用户名和密码登录,比如是单位或学校可能更需要所有人使用一个证书,然后再配置用户名和密码登陆,需手动打开openvpn的配置文件server.conf,取消注释auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env 、username-as-common-name、script-security 3这三行即可),然后我们编辑psw-file,这里面定义用户名和密码,一行一个,用户名和密码使用空格分开。客户端同样需要配置 auth-user-pass (取消注释即可)。
4、如果服务器是在单位或学校,一般我们的需求是访问单位的其它服务器,上网使用本地网络,安装时可以选择不开启redirect-gateway。
安装过程中所有的选项都是为了生成适合自己需求的/etc/openvpn/server.conf,安装完成所有需求都可以手动修改,每个常用条目我都做了中文说明,贴在下面
# 监听地址 local 0.0.0.0 # 监听端口 port 1194 # 监听协议 proto udp #采用路由隧道模式,TUN模式是一种虚拟点对点的网络设备模式,通常用于实现点对点VPN,TAP模式是一种以太网桥设备模式 dev tun ;dev tap # ca证书路径 ca /etc/openvpn/server/ca.crt # 服务器证书 cert /etc/openvpn/server/server.crt # This file should be kept secret 服务器 key /etc/openvpn/server/server.key # 密钥交换协议文件 dh /etc/openvpn/server/dh.pem auth SHA256 #tls-auth 和 tls-crypt 两种 TLS 握手策略,tls-crypt 更加的安全.tls-crypt 将使用预共享密钥对所有消息进行加密,隐藏了与OpenVPN服务器进行的TLS握手的初始化,能够防止 TLS 拒绝服务攻击 tls-crypt /etc/openvpn/server/tc.key # TUN模式下运行时配置虚拟寻址拓扑 topology subnet #VPN服务端为自己和客户端分配IP的地址池,服务端自己获取网段的第一个地址(这里为10.8.0.1),后为客户端分配其他的可用地址 server 10.8.0.0 255.255.255.0 #记录已分配虚拟IP的客户端和虚拟IP的对应关系,以后openvpn重启时,将可以按照此文件继续为对应的客户端分配此前相同的IP ifconfig-pool-persist ipp.txt # 存活时间,10秒ping一次,120 如未收到响应则视为断线 keepalive 10 120 #通信加密 须与客户端相同 cipher AES-256-GCM #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys persist-key # 检测超时后,重新启动VPN,一直保持tun是linkup,否则网络会先linkdown然后再linkup persist-tun # 日志级别 verb 3 # 证书吊销,当特定密钥被泄露但整体 PKI 仍然完好无损时使用 crl-verify /etc/openvpn/server/crl.pem #最多连接客户端数量 max-clients 50 #允许客户端访问的服务器所在网络 ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" #配置密码认证,客户端需同时开启 ;auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env ;username-as-common-name ;script-security 3 #不使用证书登录,不建议开启 ;client-cert-not-required #UDP辅助类功能,TCP不要开启,不然服务端启动会出错。UDP不像TCP有三次握手状态 断了就是断了,所以要让客户端发送断线通知才行,如果UDP不开启,日志会不准确 explicit-exit-notify #开启全局代理 push "redirect-gateway def1 bypass-dhcp" #不开启全局模式的情况下如果推送DNS可能会造成不能上网 push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 1.1.1.1"
2019/12/26说明:随着openvpn版本的更新,经测试使用此脚本安装完,openvpn服务并不能通过脚本中写的systemctl start openvpn@server启动,因为懒得把脚本服务启动部分重写了,如果安装完显示服务启动出错,请手动执行启动命令,如果服务不能启动请将/etc/openvpn.server.conf复制到/etc/openvpn/server内,或者直接做个硬链接 ln /etc/openvpn/server.conf /etc/openvpn/server/server.conf 。然后systemctl start openvpn-server@server应该就可以了。
脚本是根据我的需求编写的,使用生成好的密钥/证书,服务端使用脚本安装完成后启动openvpn,把/etc/openvpn目录的client.zip下载下来,解压后放在客户端修改成你的服务端ip就可以使用。
下载地址:https://github.com/qiguang0920/openvpn.git
git clone https://github.com/qiguang0920/openvpn.git; cd openvpn;chmod +x OpenVPN_centos7.sh;./OpenVPN_centos7.sh
脚本适合想快速部署而且偏懒得童鞋。如果对安全要求较高,在安装完成后可以重新生成证书,再配置下server.conf指向你生成的证书就可以了。客户端同样。
进入/etc/openvpn/easy-rsa/easyrsa3
如果不使用证书,只使用用户名和密码验证,把下面一行的注释也去掉
client-cert-not-required
同样,checkpsw.sh和psw-file这两个文件官方安装包安装完也是没有的,checkpsw.sh我们可以从网上下载,psw-file自己新建一个就行。
checkpsw.sh官方下载地址: http://openvpn.se/files/other/checkpsw.sh (PS:这个网址被墙了)
Proudly Powered By WordPress | IEWB.NET 2009-2024 版权所有