# 安装 sudo apt-get install openvpn sudo apt-get install easy-rsa # 配置easy-rsa cd /etc/openvpn/server cp -r /usr/share/easy-rsa/ . ## 拷贝模板并修改vars的参数 cp vars.example vars vim vars
1 2 3 4 5 6 7 8 9 10
# 配置Easyrsa及生成公钥 ./easyrsa init-pki Note: using Easy-RSA configuration from: ./vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /etc/openvpn/server/easy-rsa/pki ./easyrsa build-ca nopass Common Name (eg: your user, host, or server name) [Easy-RSA CA]:acsa CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/openvpn/server/easy-rsa/pki/ca.crt
# 生成服务器私钥和请求 ./easyrsa gen-req shaojie nopass Common Name (eg: your user, host, or server name) [shaojie]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/server/easy-rsa/pki/reqs/shaojie.req key: /etc/openvpn/server/easy-rsa/pki/private/shaojie.key # 拷贝服务器私钥文件到openvpn配置文件目录下 cp pki/private/shaojie.key /etc/openvpn/server
# 生成服务器证书 mv pki/reqs/shaojie.req pki/reqs/shaojieServer.req ./easyrsa import-req pki/reqs/shaojieServer.req shaojie Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020 The request has been successfully imported with a short name of: shaojie You may now use this name to perform signing operations on this request. ./easyrsa sign-req server shaojie
将两个shaojie.crt文件和ca.crt文件一起复制到openvpn配置文件目录下
1 2 3 4 5 6
cp pki/ca.crt pki/issued/shaojie.crt /etc/openvpn/server # 生成加密文件(可选,可以提高VPN安全性),这个比较慢,需要稍等几分钟 ./easyrsa gen-dh DH parameters of size 2048 created at /etc/openvpn/server/easy-rsa/pki/dh.pem openvpn --genkey --secret ta.key #生成随机密钥(仅适用于非TLS静态密钥加密模式):--genkey : 生成一个随机密钥作为共享密钥 cp ta.key pki/dh.pem /etc/openvpn/server
# 某些具体的Windows网络设置可以被推送到客户端,例如DNS或WINS服务器地址。(可选) # 下列地址来自opendns.com提供的Public DNS 服务器。 ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220" push "dhcp-option DNS 8.8.8.8"
sudo service openvpn status ● openvpn.service - OpenVPN service Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled) Active: active (exited) since Sat 2021-04-24 20:40:13 UTC; 2 months 22 days ago Main PID: 1691 (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 154190) Memory: 0B CGroup: /system.slice/openvpn.service
Warning: journal has been rotated since unit was started, output may be incomplete. $ cat server.conf local 202.38.73.26 port 1194 proto udp dev tun #tun路由模式,tap桥模式,据说tun效率高于tap,但是tun只能转发IP数据,tap是二层可以封装任何协议,window下只有tap模式 ca ca.crt cert server.crt key server.key dh dh.pem tls-crypt tc.key # 新加入 ,不使用 tls-auth ta.key 0 改用 tls-crypt tc.key openvpn 2.4 版的新參數 topology subnet # OpenVPN默认的拓扑方式是net30:表示掩码30位,有地址浪费 server 10.8.0.0 255.255.255.0 #定义分配给客户端的IP段,服务端自己默认使用第一个可用地址 ifconfig-pool-persist ipp.txt #在openvpn重启时,再次连接的客户端将依然被分配和以前一样的IP地址 # push表示推送,即将配置推送给客户端,让客户端也使用 push "redirect-gateway def1 bypass-dhcp" #重定向默认网关 此设置将路由/强制所有流量通过VPN。 push "dhcp-option DNS 202.38.64.56" #指定客户端使用的主DNS push "dhcp-option DNS 202.38.64.17" #指定客户端使用的备DNS server-ipv6 2001:0db8:ee00:abcd::/64 push "route-ipv6 2001:da8:d800:811:ae1f:6bff:fe8a:e4ba/64" push "route-ipv6 2000::/3" keepalive 10 120 #表示每隔10秒ping一下客户端/服务端,若是120秒内无响应,认为down,随即重启openvpn(强烈开启) auth SHA512 # 加密算法 cipher AES-256-CBC user nobody # 待openvpn初始化完成后,将其降级为nobody权限运行 group nogroup persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys persist-tun #通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,否则网络连接会先linkdown然后linkup status openvpn-status.log #状态文件:定期(默认60s)把状态信息写到该文件,以便自己写程序计费或者进行其他操作(需要关闭selinux) verb 3 #日志记录级别,可选0-9,0只记录错误信息,4能记录普通的信息,5和6在连接出现问题时能帮助调试,9显示所有信息,甚至连包头等信息都显示(像tcpdump) crl-verify crl.pem # crl证书 ./easyrsa gen-crl产生,默认180天过期 explicit-exit-notify # 如果协议改成了TCP,这里数值要改成0