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.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:
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:
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和comman name后 ,创建迪菲·赫尔曼参数
./easyrsa gen-dh openvpn --genkey --secret ta.key cp -r ta.key /etc/openvpn/
创建服务端证书
./easyrsa gen-req server [nopass]
输入password和common name后,继续签约服务端证书:
./easyrsa sign-req server server
输入“yes”确认并接着输入password后,完成。
生成客户端证书与密钥
在服务端操作,为Windows/Linux客户端生成证书与密钥。
Windows
./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/
将以上文件复制到客户端。
Linux
Linux客户端不需要从服务端复制证书,但是需要配置网络:
# 修改网络配置 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf # 使配置生效 sysctl -p
启动openvpn
# 配置防火墙(以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客户端的安装方法和服务端安装方法相同,其配置文件和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即可。
原创文章禁止转载:技术学堂 » Linux安装OpenVPN及服务端与客户端各项参数介绍