- 官方文档
https://openvpn.net/community-resources/how-to/
[SOLVED] OpenVPN 重复的消息: TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
Wed Jun 08 01:55:59 2011 C:\WINDOWS\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 10.8.0.5
Wed Jun 08 01:55:59 2011 Warning: route gateway is not reachable on any active network adapters: 10.8.0.5
Wed Jun 08 01:55:59 2011 Route addition via IPAPI failed [adaptive]
Wed Jun 08 01:55:59 2011 C:\WINDOWS\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 10.8.0.5
Wed Jun 08 01:55:59 2011 Warning: route gateway is not reachable on any active network adapters: 10.8.0.5
Wed Jun 08 01:55:59 2011 Route addition via IPAPI failed [adaptive]
解决方式:
Warning: route gateway is not reachable on any active network adapters: 10.8.0.5
- 到你安装OpenVPN\bin目录下,将openvpn.exe, openvpn-gui-1.0.3.exe以及openvpnserv.exe设置管理员权限和windows xp 兼容模式(右击-属性-兼容性)
- 修改客户端配置文件(.ovpn),增加一行:
route-method exe
优化vpn速度
sever端
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"
tun-mtu 9000
cipher none // 关闭加密
auth none //关闭MAC
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"
tun-mtu 9000
cipher none // 关闭加密
auth none //关闭MAC
client端
tun-mtu 9000
mute 20
cipher none // 关闭加密
auth none //关闭MAC
tun-mtu 9000
mute 20
cipher none // 关闭加密
auth none //关闭MAC
可以把压缩删除
OpenSSL加密与LZO压缩的影响
对于不是特别古老的CPU,这两项都不会成为性能瓶颈。然而:
(1)VPS等环境下,cpu被共享,服务器能用于压缩和加密的计算资源不多
(2)客户端设备繁多,可能存在性能瓶颈。
对SSL,OpenVPN先查看可用的加密方法:
openvpn --show-ciphers
注意区别于
openvpn --show-tls
后者是指在交换密钥时用到的加密方法,而前者是指对于数据通道的加密方法。前者真正影响传输性能。
速度比较快的加密方法也只有bf-cbc和aes-128-cbc两种。然后分别在服务端和客户端进行一下OpenSSL性能测试,Win下的OpenSSL在OpenVPN安装目录下的bin文件夹内。
openssl speed bf-cbc aes-128-cbc
根据实际速度选择合适的加密算法,然后在服务器和客户端的openvpn配置文件中用cipher BF-CBC或者cipher AES-128-CBC指明,服务端和客户端配置文件都需要更改。注意部分Intel i5/i7和AMD的Bulldozer处理器支持AES-NI指令集,搭配OpenSSL的AES-NI补丁可以将AES-128-CBC的速度提升7倍。
对lzo我没有找到简单科学的的测试方法,我的测试方法是运行
dd count=10240 if=/dev/urandom | lzop -c >/dev/null
然后把上面的结果处以top里面看到的lzop的cpu占用率,得到lzop真实效率。在我的测试中,Xeon(R) CPU X3220@2.40GHz的一个核心上,占用14%的cpu时间,只能处理5.0MB/s的压缩。官方的数据在这里。
意义
不使用OpenVPN时,下载有多线程工具,视频网站有CDN加速,RWIN和RTT的限制都被很好地避免了。然而OpenVPN需要将所有流量全部经由单个UDP/TCP连接传输,保证单个接口/连接的吞吐率就非常重要
对于不是特别古老的CPU,这两项都不会成为性能瓶颈。然而:
(1)VPS等环境下,cpu被共享,服务器能用于压缩和加密的计算资源不多
(2)客户端设备繁多,可能存在性能瓶颈。
对SSL,OpenVPN先查看可用的加密方法:
openvpn --show-ciphers
注意区别于
openvpn --show-tls
后者是指在交换密钥时用到的加密方法,而前者是指对于数据通道的加密方法。前者真正影响传输性能。
速度比较快的加密方法也只有bf-cbc和aes-128-cbc两种。然后分别在服务端和客户端进行一下OpenSSL性能测试,Win下的OpenSSL在OpenVPN安装目录下的bin文件夹内。
openssl speed bf-cbc aes-128-cbc
根据实际速度选择合适的加密算法,然后在服务器和客户端的openvpn配置文件中用cipher BF-CBC或者cipher AES-128-CBC指明,服务端和客户端配置文件都需要更改。注意部分Intel i5/i7和AMD的Bulldozer处理器支持AES-NI指令集,搭配OpenSSL的AES-NI补丁可以将AES-128-CBC的速度提升7倍。
对lzo我没有找到简单科学的的测试方法,我的测试方法是运行
dd count=10240 if=/dev/urandom | lzop -c >/dev/null
然后把上面的结果处以top里面看到的lzop的cpu占用率,得到lzop真实效率。在我的测试中,Xeon(R) CPU X3220@2.40GHz的一个核心上,占用14%的cpu时间,只能处理5.0MB/s的压缩。官方的数据在这里。
意义
不使用OpenVPN时,下载有多线程工具,视频网站有CDN加速,RWIN和RTT的限制都被很好地避免了。然而OpenVPN需要将所有流量全部经由单个UDP/TCP连接传输,保证单个接口/连接的吞吐率就非常重要
3安装方式
配置模版
#通讯协议,可以选择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
explicit-exit-notify 1
当服务器重新启动时,通知客户端,以便它可以自动重新连接。仅在UDP协议是可用
#通讯协议,可以选择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
explicit-exit-notify 1
当服务器重新启动时,通知客户端,以便它可以自动重新连接。仅在UDP协议是可用
- client
#声明为客户端
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
#声明为客户端
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
注意,如果客户端和服务端在同一网络内(如,同个路由器下,192.168.1.100 和 192.168.1.101),要增加 local
关键字(这个坑很大):
push "redirect-gateway local def1 bypass-dhcp"
push "redirect-gateway local def1 bypass-dhcp"
系统参数优化
yum install epel-release -y
#替换阿里源
sed -e 's,^#baseurl,baseurl,g' \
-e 's,^metalink,#metalink,g' \
-e 's,^mirrorlist=,#mirrorlist=,g' \
-e 's,http://download.fedoraproject.org/pub,https://mirrors.aliyun.com,g' \
-i /etc/yum.repos.d/epel.repo
yum makecache
yum update -y
yum install epel-release -y
#替换阿里源
sed -e 's,^#baseurl,baseurl,g' \
-e 's,^metalink,#metalink,g' \
-e 's,^mirrorlist=,#mirrorlist=,g' \
-e 's,http://download.fedoraproject.org/pub,https://mirrors.aliyun.com,g' \
-i /etc/yum.repos.d/epel.repo
yum makecache
yum update -y
修改sysctl参数
cat > /etc/sysctl.d/99-net.conf <<EOF
# 二层的网桥在转发包时也会被iptables的FORWARD规则所过滤
net.bridge.bridge-nf-call-arptables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
# 关闭严格校验数据包的反向路径,默认值1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
# 设置 conntrack 的上限
net.netfilter.nf_conntrack_max=1048576
# 端口最大的监听队列的长度
net.core.somaxconn=21644
# TCP阻塞控制算法BBR,Linux内核版本4.9开始内置BBR算法
#net.ipv4.tcp_congestion_control=bbr
#net.core.default_qdisc=fq
# 打开ipv4数据包转发
net.ipv4.ip_forward=1
# TCP FastOpen
# 0:关闭 ; 1:作为客户端时使用 ; 2:作为服务器端时使用 ; 3:无论作为客户端还是服务器端都使用
net.ipv4.tcp_fastopen=3
EOF
cat > /etc/sysctl.d/99-net.conf <<EOF
# 二层的网桥在转发包时也会被iptables的FORWARD规则所过滤
net.bridge.bridge-nf-call-arptables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
# 关闭严格校验数据包的反向路径,默认值1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
# 设置 conntrack 的上限
net.netfilter.nf_conntrack_max=1048576
# 端口最大的监听队列的长度
net.core.somaxconn=21644
# TCP阻塞控制算法BBR,Linux内核版本4.9开始内置BBR算法
#net.ipv4.tcp_congestion_control=bbr
#net.core.default_qdisc=fq
# 打开ipv4数据包转发
net.ipv4.ip_forward=1
# TCP FastOpen
# 0:关闭 ; 1:作为客户端时使用 ; 2:作为服务器端时使用 ; 3:无论作为客户端还是服务器端都使用
net.ipv4.tcp_fastopen=3
EOF
修改limits参数
cat > /etc/security/limits.d/99-centos.conf <<EOF
* - nproc 1048576
* - nofile 1048576
EOF
cat > /etc/security/limits.d/99-centos.conf <<EOF
* - nproc 1048576
* - nofile 1048576
EOF