由于运维需要,我个人常使用OpenVPN打通机房之间内网的互连,但是配置较多老是忘记,于是抽空整理了一下不同工作模式的配置模板。
服务器(Server)模式是单一服务器对多个客户端的模式,应用场景是出差员工通过移动设备、笔记本电脑拨入公司内网。
使用账号密码认证、服务端配置模板如下:
#通讯协议,可以选择TCP或者UDP,UDP更适合于在丢包率较大的环境使用 proto tcp #端口号 port 1194 #使用tun或者tap设备 dev tun #实现/24子网掩码换算,最大客户端有255个 topology subnet #设置子网,默认是10.8.0.0/24 server 10.8.0.0 255.255.255.0 #认证算法 auth SHA256 #加密算法 cipher AES-256-CBC #使用LZO压缩 comp-lzo adaptive #告知客户端通讯将采用LZO压缩 push "comp-lzo adaptive" #此处是全局路由选项,即告知客户端将所有流量通过VPN隧道发送,一般是不使用 push "redirect-gateway def1 bypass-dhcp" #推送DNS信息,下同 push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 8.8.8.8" #服务器CA证书路径 ca /etc/openvpn/cert/ca.crt #diffie hellman密钥路径 dh /etc/openvpn/cert/dh1024.pem #服务器证书路径 cert /etc/openvpn/cert/server.crt #服务器密钥路径 key /etc/openvpn/cert/server.key #在SSL/TLS握手包的基础上增加额外的签名以提高安全性。 tls-auth /etc/openvpn/cert/ta.key #此选项使VPN在重连时不重新读取key且不会将tun设备关闭 persist-key persist-tun #通过yum安装的,可将其配置为以openvpn用户和组运行,增加安全性 user openvpn group openvpn #openvpn账号密码认证脚本 auth-user-pass-verify /etc/openvpn/openvpn3config/checkpsw.sh via-env #使用客户端提供的用户名作为common name username-as-common-name #不要求客户端提供证书 client-cert-not-required #脚本运行级别为3,否则无法认证用户名密码 script-security 3 #客户端配置文件,可以配置客户端的IP client-config-dir /etc/openvpn/ccd #生成日志 log /var/log/openvpn.log log-append /var/log/openvpn.log #将最大客户端设置为255 max-clients 255 #该选项允许客户端直接通讯而在路由上不经过网关 client-to-client #10秒钟ping一次对端以确定对方是否在线,60秒未响应则断开连接,适合客户端在NAT后使用 keepalive 10 60 nice 3 #日志级别设置 verb 4 mute 10
客户端模板如下
#声明为客户端 client #使用tun/tap设备,必须与服务端一直 dev tun #连接协议,必须与服务端一直 proto tcp #远程服务器的地址和端口号,可以是域名也可以是IP地址 remote IP or Domain name Portnum #在服务器中断后自动连接 resolv-retry infinite #不指定网卡 nobind #以下同服务端说明 persist-key persist-tun auth SHA256 cipher AES-256-CBC comp-lzo adaptive nice 0 verb 3 mute 10 #认证文件,即用户名密码,下次无需再输入 auth-user-pass pass.txt #ca证书路径,也可使用<ca></ca>的形式直接将证书粘贴于此 ca ca证书路径 #key应该与服务器一致 tls-auth ta.key