OpenVPN配置记录
开启双向通信后连接的客户端可以访问可通信的客户端
注意添加:push "route 10.22.2.0 255.255.255.0" 告知客户端ip10.22.2.0流量走VPN通道
注意添加:ccd/{certname}开启服务端对指定ip与证书的客户端访问
注意添加:route 10.22.2.0 255.255.255.0 告知服务端可ip10.22.2.0流量走VPN通道
教程:Linux系统搭建搭建OpenVPN
相关文档1
服务安装与设置(OpenVPN 2.4.12 x86_64-redhat-linux-gnu)
# ubuntu安装 apt-get install openvpn # 查看 systemctl status openvpn.service # 其他工具 apt-get install libssl-dev apt-get install openssl # 制作证书相关工具 apt-get -y install easy-rsa # 查看easy-rsa安装的文件,如下: dpkg -L easy-rsa |more # 启用 IP 转发: sudo sysctl -w net.ipv4.ip_forward=1 # 持久化 IP 转发设置: sudo nano /etc/sysctl.conf # 找到 #net.ipv4.ip_forward=1 并取消注释。然后保存文件并使其生效: sudo sysctl -p # 开启nat转发,相当于路由映射功能,开启后可直接访问内网其他主机 建议加启动脚本里,以免重启丢失配置 # 如果未开启,内网其他主机收到的访问者ip是10.8.0.x,它们会找不到访问者,开启后访问者ip就是vpn服务ip # -s 10.8.0.0/24 为指定网段,可不指定针对所有 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
服务器配置
server文件配置
# /etc/openvpn/server.conf port 1194 #端口 proto tcp #协议 dev tun #采用路由隧道模式 ca /opt/easy-rsa/pki/ca.crt #ca证书的位置 cert /opt/easy-rsa/pki/issued/server.crt #服务端公钥的位置 key /opt/easy-rsa/pki/private/server.key #服务端私钥的位置 dh /opt/easy-rsa/pki/dh.pem #证书校验算法 server 10.8.0.0 255.255.255.0 #给客户端分配的地址池 push "route 172.22.227.0 255.255.255.0" #允许客户端访问的内网网段 push "route 10.22.2.0 255.255.255.0" #允许客户端访问的内网网段 push "dhcp-option DNS 8.8.8.8" #告知客户端使用的dns,如果要vpn控制dns可以指向vpn服务内部ip(vpnip如10.8.0.1)并在服务上搭建dns服务 route 10.22.2.0 255.255.255.0 #向服务端声明客户端的路由 client-to-client #允许客户端与客户端之间通信 client-config-dir ccd #指定ccd客户端配置文件目录 ifconfig-pool-persist ipp.txt #地址池记录文件位置,未来让openvpn客户端固定ip地址使用的 keepalive 10 120 #存活时间,10秒ping一次,120秒如果未收到响应则视为短线 max-clients 100 #最多允许100个客户端连接 status openvpn-status.log #日志位置,记录openvpn状态 log /var/log/openvpn.log #openvpn日志记录位置 verb 3 #openvpn版本 persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取 persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的,否则网络会先linkdown然后再linkup duplicate-cn #客户端密钥(证书和私钥)是否可以重复 link-mtu 1543 #最大传输单元,客户端配置与这个一致才稳定 # 启用 tls-auth 并指定 ta.key 文件 # tls-auth 用于启用 HMAC(Hash-based Message Authentication Code)认证。 # /etc/openvpn/ta.key 是服务器端密钥文件的路径。 # 0 表示服务器端使用这个密钥进行验证,客户端将使用 1 来表示它的角色。 tls-auth /etc/openvpn/ta.key 0
开启服务器对客户端通信(双向通信)
#/etc/openvpn/ccd/client(文件名client对应证书name,一个ip一个文件) iroute 10.22.2.0 255.255.255.0
客户端配置
# linux 保存到 /etc/openvpn/client.conf dev tun proto tcp remote openvpnsvc.wanderto.top 1194 ;http-proxy-retry ;http-proxy [proxy server] [proxy port] resolv-retry infinite nobind persist-key persist-tun client verb 3 #auth-user-pass link-mtu 1543 # 启用 tls-auth 并指定 ta.key 文件 tls-auth ta.key 1 <ca> -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- -----END PRIVATE KEY----- </key> #或者指定文件 # ca ./ca.crt # cert ./cloudvoyage.crt # key ./cloudvoyage.key # 客户端启动命令:service openvpn@client start
生成客户证书
# 创建Easy-RSA目录并初始化PKI(公共密钥基础设施): make-cadir /opt/easy-rsa # 然后,使用下面的命令初始化 PKI(证书颁发机构)目录: ./easyrsa init-pki # 接下来,生成 CA 证书。这将是我们 VPN 服务器和客户端信任的根证书。 ./easyrsa build-ca # 生成服务器证书和密钥(openvpn的service证书): ./easyrsa build-server-full server nopass # 生成 Diffie-Hellman 参数,用于加密密钥交换: ./easyrsa gen-dh # 生成一个用于防止 DoS 攻击的 HMAC 密钥(可选): openvpn --genkey --secret pki/ta.key # 证书目录 cd /opt/easy-rsa/ # 开始生成 ./easyrsa gen-req client1 nopass # PS: 回车就行 ./easyrsa sign-req client client1 # PS: 会要求输入CA证书生成时输入的密码(自己的密码小提示,常用密码不加英文)