Linux下安装Openvpn及服务端与客户端各项参数介绍

Openvpn 是一个非常简单易用的开源VPN,可在Windows、Linux/BSD等各大平台下运行,其核心技术包括虚拟网卡和SSL协议。

虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。OpenSSL库的作用是加密数据与控制信息,并且提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合。

安装与配置

安装openvpn+easyrsa

yum -y install epel-release
yum install -y automake lzo-devel openssl-devel pam-devel openssl lzo pam pkgconfig makecache
yum -y install openvpn easy-rsa

复制配置文件

cp -R /usr/share/easy-rsa/ /etc/openvpn/

cp /usr/share/doc/openvpn-2.4.6/sample/sample-config-files/server.conf /etc/openvpn/

cp -r /usr/share/doc/easy-rsa-3.0.3/vars.example /etc/openvpn/easy-rsa/3.0/vars

配置openvpn-server

vi /etc/openvpn/server.conf

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/3.0/pki/ca.crt
cert /etc/openvpn/easy-rsa/3.0.3/pki/issued/vpnserver.crt
key /etc/openvpn/easy-rsa/3.0.3/pki/private/vpnserver.key
dh /etc/openvpn/easy-rsa/3.0/pki/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
comp-lzo
max-clients 100
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
mute 20

配置easy-rsa

vi /etc/openvpn/easy-rsa/3.0/vars

set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "BEIJING"
set_var EASYRSA_REQ_CITY "BEIJING"
set_var EASYRSA_REQ_ORG "ANDYLOUSE.NET"
set_var EASYRSA_REQ_EMAIL "ANDY@ANDYLOUSE.NET"
set_var EASYRSA_REQ_OU "ANDY"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "ANDY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST "sha256"

生成服务端证书与密钥

cd /etc/openvpn/easy-rsa/3.0

初始化pki

./easyrsa init-pki

创建ca

./easyrsa build-ca

设置 password(password123) 和 comman name (vpnserver) 后,创建迪菲·赫尔曼参数

/easyrsa gen-dh

openvpn --genkey --secret ta.key

cp -r ta.key /etc/openvpn/

创建服务端证书

./easyrsa gen-req server [nopass]

输入 password(password123) 和 common name (server)后,继续签约服务端证书:

./easyrsa sign-req server server

输入 yes 接着输入 password(password123) 后,完成。

注意:要留意生成的各证书、密钥生所存放路径。

生成客户端证书与密钥

Windows

/easyrsa build-client-full client

输入 password(password123) 后继续,密码可以为空,然后集中保存证书并复制到客户端

mkdir -p /etc/openvpn/client

cp -r /etc/openvpn/easy-rsa/3.0/pki/ca.crt /etc/openvpn/client/

cp -r /etc/openvpn/easy-rsa/3.0.3/pki/issued/client.crt /etc/openvpn/client/

cp -r /etc/openvpn/easy-rsa/3.0.3/pki/private/client.key /etc/openvpn/client/

cp -r /etc/openvpn/ta.key /etc/openvpn/client/

Linux

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

sysctl -p

配置防火墙

firewall-cmd --add-service=openvpn --permanent

firewall-cmd --add-port=1194/udp --permanent

firewall-cmd --add-source=10.8.0.0 --permanent

firewall-cmd --query-source=10.8.0.0 --permanent

firewall-cmd --add-masquerade --permanent

firewall-cmd --query-masquerade --permanent

firewall-cmd --reload

启动openvpn

systemctl start openvpn@server

第一次为提示,回车后继续执行该命令,随后输入服务端密码(password123)

安装客户端

因本文后面有客户端配置文件的详细说明,故此处省略。

Windows

国内貌似暂时打不开openvpn的官网,幸好本人有 openvpn-2.4.5 版本的客户端提供下载。

安装完毕后,将之前复制的客户端证书及密钥文件等,复制至安装目录的 config 目录下,随后修改配置文件。

Linux

Linux的客户端和服务端安装方法相同,其配置方法和Windows的相同,只是文件扩展名有区别而已,Windows是“.ovpn”,Linux是“.conf”。

Openvpn-server配置说明

# 默认情况下监听本服务器上所有IP
;local 10.10.200.30

# 默认监控端口,注意防火墙设置
port 1194

# 网络协议
;proto tcp
proto udp

# tap为以太网通道,桥接模式
# tun为路由IP通道,容易控制
dev tap
;dev tun

# 通常只在Windows下设置,配置多个隧道时指定适配器名称,如:MyTap
;dev-node MyTap

# 服务端和客户端都将使用相同的CA证书
# 服务端和客户端指定各自的证书和密钥
# 服务端和客户端的证书必须使用相同的 Common Name
# 可以使用以配置文件开始为根的相对路径,也可以使用绝对路径
ca /etc/openvpn/easy-rsa/3.0/pki/ca.crt
cert /etc/openvpn/easy-rsa/3.0.3/pki/issued/server.crt
key /etc/openvpn/easy-rsa/3.0.3/pki/private/server.key

# 指定迪菲·赫尔曼参数
# 参数生成命令:openssl dhparam -out dh2048.pem 2048
dh dh2048.pem

# 子网网络拓扑
# Windows客户端且版本低于2.0.9才需要设置
;topology subnet

# 为客户端分配IP地址的VPN的网段,不能和双方的内网网段重复
server 10.8.0.0 255.255.255.0

# 客户端和VIP的对应表,当客户端重连时仍然分配原IP
ifconfig-pool-persist ipp.txt

# 仅针对以太网桥接模式
# 首先,将以太网网卡和TAP进行桥接
# 然后,设置桥接接口的IP地址、子网掩码
# 最后,指定用于分配给客户端的子网的IP范围
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

# 仅针对使用DHCP代理的以太网桥接模式
# 仅用于客户端,并且该客户端的TAP适配器需要绑定到一个DHCP客户端上
# 首先,将以太网网卡和TAP进行桥接
;server-bridge

# 推送路由信息到客户端,使客户端能够连接到服务器背后的其他私有子网
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"

# 为特定的客户端指定IP,或使客户端背后子网也可以连接到VPN
# 举例,首先取消如下注释:
;client-config-dir ccd
;ifconfig-push 10.9.0.1 10.9.0.2
# 然后在ccd目录中添加以 Common Name 命名的文件,其内容是:
;route 192.168.40.128 255.255.255.248

# 为不同群组的客户端启用不同的防火墙访问策略
# 关于learn-address脚本的更多信息请参考官方手册页面
;learn-address ./script

# 使客户端所有的流量都通过VPN传输,请注意服务端的DHCP设置
push "redirect-gateway def1 bypass-dhcp"

# 用OpenVPN的DHCP功能为客户端提供指定的DNS
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 8.8.8.8"

# 允许客户端之间互相访问
;client-to-client

# 使具有相同 Common Name 的客户端都可以登陆
# 建议每个客户端都有独立的证书和私钥
;duplicate-cn

# 每10秒ping一次,如果120秒没有回应则认为远程连接已关闭
keepalive 10 120

# 服务端和客户端都需要有该密钥的一个拷贝
# 第二个参数在服务器端应该为'0',在客户端应该为'1'
tls-auth ta.key 0

# 加密算法
cipher AES-256-CBC

# 在VPN连接上启用压缩并推送至客户端
# 仅2.4以上版本
;compress lz4-v2
;push "compress lz4-v2"

# 在VPN连接上启用压缩,服务端和客户端都必须采用相同配置
comp-lzo

# 最大客户端连接数
max-clients 100

# 降低OpenVPN守护进程的权限
user nobody
group nobody

# 保障重启时仍能保留一些状态
persist-key
persist-tun

# 输出短日志,每分钟刷新一次,以显示当前的客户端
status openvpn-status.log

# 记录日志,重启openvpn后覆盖原log文件
;log openvpn.log

# 记录日志,新日志信息追加到文件最后
log-append openvpn.log

# 日志要记录的级别,值越大日志越详细:
# 0 只记录错误信息
# 4 能记录普通的信息
# 5/6 在连接出现问题时能帮助调试
# 9 显示所有信息,包括包头信息等 
verb 3

# 相同信息的记录次数,连续出现20条后不再记录到日志中
mute 20

# 当服务端重启后,使客户端能自动重连
explicit-exit-notify 1

Openvpn-client配置说明

配置中未作注释部分,是在服务端有相应的配置,与其统一即可。

# 指定为客户端
client

;dev tap
dev tun

;dev-node MyTap

;proto tcp
proto udp

# 指定服务器(主机名或IP)以及端口号,可设置多个VPN服务器
remote vpnserver 1194
;remote 10.10.200.32 1194

# 设置多个VPN服务器时,采用随机连接模式,否则按先后顺序(非轮询)
;remote-random

# 启用自动重连,适合不稳定的网络环境
resolv-retry infinite

# 客户端默认不需要绑定本机特定的端口号
nobind

;user nobody
;group nobody

persist-key
persist-tun

# 通过HTTP代理来连接VPN服务器
# 连接失败时自动重试
# 指定代理服务器的IP和端口
;http-proxy-retry
;http-proxy [proxy server] [proxy port]

# 适用于无线网络,忽略重复数据包的警告信息
;mute-replay-warnings

ca ca.crt
cert client.crt
key client.key

# 通过检查证书的nsCertType字段是否与服务端相同,默认为server
# 这是预防潜在攻击的一种重要措施
# 可以通过./easyrsa build-key-server 脚本实现
ns-cert-type server

;tls-auth ta.key 1

;cipher AES-256-CBC

comp-lzo

# 可不与服务端相同
verb 3

;mute 20

附加知识·删除证书

先删除以下文件:

rm -rf /etc/openvpn/easy-rsa/3.0/pki/reqs/vpnserver.req
rm -rf /etc/openvpn/easy-rsa/3.0/pki/private/vpnserver.key

随后撤消证书:

cd /etc/openvpn/easy-rsa/3.0

./easyrsa revoke server

./easyrsa gen-crl

最后重启openvpn即可。

赞 (0) 打赏

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. lakewood nextdoor neighborhood website接了双线,端口转å>+双IP+双路由表达到服务双开,10.0.9.2是线路2 ip addr add 10.0.9.5/24 dev eth0:1 在/etc/iproute2/rt_tables加一行1 rt2 追加路由表2 ip route add default via 10.0.9.2 dev eth0:1 table rt2 ip rule add from 10.0.9.5/32 table rt2 ip rule add to 10.0.9.5/32 tabt2回复
  2. 蚂蚁乐居真心不错,不得不支持一下先!回复

感谢您的支持与帮助

支付宝扫一扫打赏

微信扫一扫打赏