CentOS 7下部署openvpn

来源:互联网 发布:php适配器模式 编辑:程序博客网 时间:2024/05/29 10:35

CentOS 7下部署openvpn

操作系统

$ cat /etc/issue\SKernel \r on an \m

安装openvpn

这里我使用epel源安装的openvpn, 你也可以使用源码方式编译安装。

yum install openvpn easy-rsa -y

配置服务器进行初始化

cp /usr/share/doc/openvpn-2.3.10/sample/sample-config-files/server.conf /etc/openvpn/cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/

openvpn-2.3.10 这个目录是以当前openvpn版本命名的

配置pki

  • /etc/openvpn 目录,vim vars 修改 vars 配置:
export KEY_COUNTRY=”US” //国家export KEY_PROVINCE=”CA”  //省export KEY_CITY=”SanFrancisco”//城市export KEY_ORG=”Fort-Funston” //组织export KEY_EMAIL=”me@myhost.mydomain“ //邮箱# 把上面相应的内容进行修改成符合自己需要的即可# 在后面生成服务端ca证书时这里的配置会作为缺省配置# 示例如下export KEY_COUNTRY="CN"export KEY_PROVINCE="BJ"export KEY_CITY="Beijing"export KEY_ORG="sealake"export KEY_EMAIL="sealake@yeah.net"export KEY_OU="OpenVPN"
  • 修改vars文件可执行并调用
chmod +x vars
  • 产生ca证书
$ source ./varsNOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys# 也就是如果执行./clean-all就会清空/etc/openvpn/keys下所有文件
  • 开始配置证书

    • 清空原有证书
    ## 下面这个命令在第一次安装时可以运行以后在添加完客户端后慎用因为这个命令会清除所有已经生成的证书密钥和上面的提示对应./clean-all
    • 生成服务器端和客户端ca证书
    ./build-ca# 由于之前做过缺省配置这里一路回车即可 # 生成服务器端密钥证书, 名字可以随便起但要记住后面要用到。./build-key-server server    # 生成客户端证书 名字任意# 建议写成你要发给的人的姓名, 方便管理. # 这里与生成服务端证书配置类似, 中间一步提示输入服务端密码, 也可以不设置密码. # 其他按照缺省提示一路回车即可。./build-key client# 如果想生成客户端使用密码方式证书登陆请使用如下命令# 其实不使用密码方式的也可以到时候在客户端登陆vpn后进行更改也是一样的。# ./build-key-pass client-pass
    • 生成DH验证文件
    ./build-dh# 生成diffie hellman参数用于增强openvpn安全性, 生成需要漫长等待, 让服务器飞一会。

配置文件

  • openvpn server.conf配置:

可按照默认模板配置本例为自定义配置文件

$ vim /etc/openvpn/server.conf;local a.b.c.dport 1988# proto tcpproto udpdev tunca   /etc/openvpn/keys/ca.crtcert /etc/openvpn/keys/server.crtkey  /etc/openvpn/keys/server.key  # This file should be kept secretdh   /etc/openvpn/keys/dh2048.pemserver 172.21.128.0 255.255.255.0push "route 172.21.128.0 255.255.255.0"ifconfig-pool-persist /etc/openvpn/ipp.txtverb 3persist-keypersist-tunlog         /opt/log/openvpn/openvpn.loglog-append  /opt/log/openvpn/openvpn.logclient-to-client  # 允许客户端之间相互通讯max-clients 100client-config-dir /etc/openvpn/clientsstatus /opt/log/openvpn/status.logkeepalive 10 120duplicate-cncipher AES-128-CBCcomp-lzo# compress lz4-v2# push "compress lz4-v2"# speedupsndbuf 131072rcvbuf 131072tun-mtu 1500# mssfix 1432 # for udp6mssfix 1472  # for udp# explicit-exit-notify 1
  • 创建openvpn日志目录
mkdir -p /opt/log/openvpn/
  • 启动openvpn服务
systemctl start openvpn@server.servicesystemctl enable openvpn@server.service
  • 开启路由转发功能
$ vim /etc/sysctl.conf# 找到net.ipv4.ip_forward = 0 把 0 改成 1

sysctl -p,使配置生效

  • 设置iptables

这一条至关重要通过配置nat将vpn网段IP转发到server内网, 172.21.128.0/24是vpn网段

iptables -t nat -A POSTROUTING -s 172.21.128.0/24 -j MASQUERADE //智能选择iptables -A INPUT -p TCP --dport 1988 -j ACCEPTiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # save iptables configservice iptables save

客户端配置

clientdev tun     # 路由模式,跟服务端配置一致proto udp   # UDP协议,跟服务端配置一致remote ${remote-addr} 1988   # openvpn服务端的公网的IP和端口resolv-retry infinitenobindpersist-keypersist-tunca    keys/ca.crtcert  keys/client.crt   # 客户端的证书文件key   keys/client.key   # 客户端的密钥文件verb 3keepalive 10 120 cipher AES-128-CBCcomp-lzo# compress lz4-v2# push "compress lz4-v2"# speedupsndbuf 131072rcvbuf 131072tun-mtu 1500# mssfix 1432 # for udp6mssfix 1472  # for udp

OpenVPN配置文件说明

openvpn配置文件内容注释如下

;local a.b.c.d  # 设置监听IP, 默认是监听所有IPport 1194       # 设置监听端口必须要对应的在防火墙里面打开proto tcp       # 设置用TCP还是UDP协议dev tun         # 设置创建tun的路由IP通道还是创建tap的以太网通道, 由于路由IP容易控制所以推荐使用tunnel# certificate(cert), and private key (key)# ca文件是服务端和客户端都必须使用的但不需要ca.key# 服务端和客户端指定各自的.crt和.key# 请注意路径,可以使用以配置文件开始为根的相对路径,# 也可以使用绝对路径# 请小心存放.key密钥文件ca keys/ca.crtcert keys/server.crtkey keys/server.key# 指定Diffie hellman parameters.默认是2048如果生成ca的时候修改过dh参数“export KEY_SIZE”则改为对应的数字dh keys/dh2048.pem# 配置VPN使用的网段OpenVPN会自动提供基于该网段的DHCP服务但不能和任何一方的局域网段重复保证唯一server 10.18.18.0 255.255.255.0# 维持一个客户端和virtual IP的对应表以方便客户端重新连接可以获得同样的IPifconfig-pool-persist ipp.txt# 设置服务端检测的间隔和超时时间 每 10 秒 ping 一次如果 120 秒没有回应则认为对方已经 downkeepalive 10 120# 使用lzo压缩的通讯,服务端和客户端都必须配置comp-lzo# 重启时仍保留一些状态persist-keypersist-tun# 输出短日志,每分钟刷新一次,以显示当前的客户端status openvpn-status.log# 缺省日志会记录在系统日志中但也可以导向到其他地方/# 建议调试的使用先不要设置,调试完成后再定义log         /var/log/openvpn/openvpn.loglog-append  /var/log/openvpn/openvpn.log# 这里主要填写openvpn所在局域网的网段我的openvpn所在的局域网是172.16.10.0push "route 172.16.10.0 255.255.255.0"# 默认客户端之间是不能直接通讯的除非把下面的语句注释掉client-to-client # 持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源//指定日志文件的记录详细级别可选0-9等级越高日志内容越详细verb 3# 常用于测试开启的话一个证书可以多个客户端连接duplicate-cn
原创粉丝点击