OpenVPN是一个非常简单易用的开源VPN,可在Windows、Linux/BSD等各大平台下运行,其核心技术包括虚拟网卡和SSL协议。
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。OpenSSL库的作用是加密数据与控制信息,并且提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合。
安装与配置
安装openvpn+easyrsa
1 2 3 |
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 |
复制配置文件
1 2 3 4 |
cp -R /usr/share/easy-rsa/ /etc/openvpn/ # 修注意路径中的版本号 cp /usr/share/doc/openvpn-2.5.0/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
修改配置文件/etc/openvpn/server.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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
修改配置文件/etc/openvpn/easy-rsa/3.0/vars:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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" |
生成服务端证书与密钥
1 2 3 4 5 |
cd /etc/openvpn/easy-rsa/3.0 # 初始化pki ./easyrsa init-pki # 创建ca ./easyrsa build-ca |
设置'password'和'comman name'后 ,创建迪菲·赫尔曼参数
1 2 3 |
./easyrsa gen-dh openvpn --genkey --secret ta.key cp -r ta.key /etc/openvpn/ |
创建服务端证书
1 2 3 |
./easyrsa gen-req server [nopass] # 输入'password'和'common name'后,继续签约服务端证书 ./easyrsa sign-req server server |
生成客户端证书与密钥
在服务端操作,为Windows/Linux客户端生成证书与密钥。
Windows
1 2 3 4 5 6 7 |
./easyrsa build-client-full client # 输入'password'后继续,然后集中保存证书 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/ |
将client目录中的文件复制到Windows客户端。
Linux
Linux客户端不需要从服务端复制证书,但是需要配置网络:
1 2 3 4 |
# 修改网络配置 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf # 使配置生效 sysctl -p |
启动openvpn
1 2 3 4 5 6 7 8 9 10 11 |
# 配置防火墙(以firewalld为例) 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 Server systemctl start openvpn@server |
第一次启动时有提示,回车后再次执行启动命令,随后输入此前设置的密码。
安装客户端
下载客户端安装包:
Windows
安装完毕后,将之前复制的客户端证书及密钥文件等,复制至安装目录的config文件夹中,随后修改配置文件。
Linux
Linux的OpenVPN客户端的安装方法和服务端安装方法相同。
OpenVPN-server配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# 默认情况下监听本服务器上所有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配置
配置中未作注释部分,是在服务端有相应的配置,与其统一即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# 指定为客户端 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 |
附加知识·删除证书
先删除以下文件:
1 2 |
rm -rf /etc/openvpn/easy-rsa/3.0/pki/reqs/vpnserver.req rm -rf /etc/openvpn/easy-rsa/3.0/pki/private/vpnserver.key |
随后撤消证书:
1 2 3 |
cd /etc/openvpn/easy-rsa/3.0 ./easyrsa revoke server ./easyrsa gen-crl |
最后重启openvpn即可。
原创文章禁止转载:技术学堂 » Linux安装OpenVPN及服务端与客户端各项参数介绍