Skip to content

Instantly share code, notes, and snippets.

@GavinFoo
Last active July 28, 2017 03:08
Show Gist options
  • Save GavinFoo/4e8d66b6890e9089e017 to your computer and use it in GitHub Desktop.
Save GavinFoo/4e8d66b6890e9089e017 to your computer and use it in GitHub Desktop.
OpenVPN
======= 参考教程 =======
http://docs.ucloud.cn/software/vpn/OpenVPN4CentOS.html
http://nmshuishui.blog.51cto.com/1850554/1544212
http://www.cnblogs.com/electron/p/3488033.html
http://www.vpndp.com/ios-openvpn-settings-tutorial/ iPhone
1、安装openvpn
首先安装依赖库
# yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig nano
我们这边用yum安装,当然你也可以自己编译安装(从这个页面下载:http://openvpn.net/index.php/download.html)。
# yum install openvpn
2、配置服务器
2.1初始化服务端
# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
# wget -c https://github.com/OpenVPN/easy-rsa/archive/master.zip
# unzip master
# mv easy-rsa-master easy-rsa
# cp -rf easy-rsa /etc/openvpn
2.2配置PKI
# cd easy-rsa/easyrsa3
# cp vars.example vars
# nano vars
1) 初始化
# ./easyrsa init-pki
2) 创建根证书
# ./easyrsa build-ca
3) 创建服务器端证书
# ./easyrsa gen-req server nopass
# 签约服务器端证书
# ./easyrsa sign server server
创建Diffie-Hellman,确保key穿越不安全网络的命令
# ./easyrsa gen-dh
2.3客户端证书
# cd ~
# mkdir client
# cp -R easy-rsa/ client/
# cd client/easy-rsa/easyrsa3/
# ./easyrsa init-pki
# 创建客户端key及生成证书
./easyrsa gen-req mudlab
cd /root/easy-rsa/easyrsa3/
# 导入req
./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/mudlab.req mudlab
# 签约证书
./easyrsa sign client mudlab
2.4 整理证书
1) 拷贝服务器密钥及证书等到openvpn目录
# cp /root/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn
# cp /root/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpn
# cp /root/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpn
# cp /root/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn
2) 拷贝客户端密钥及证书等到client目录
# cp /root/easy-rsa/easyrsa3/pki/ca.crt /root/client
# cp /root/easy-rsa/easyrsa3/pki/issued/mudlab.crt /root/client
# cp /root/client/easy-rsa/easyrsa3/pki/private/mudlab.key /root/client
3 配置服务文件
nano /etc/openvpn/server.conf
;local 119.254.110.37 #(自己vpn服务器IP)
port 11900
#使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
proto udp
#设备可选tap和tun,tap是二层设备,支持链路层协议。#tun是ip层的点对点协议,限制稍微多一些
dev tap
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret
dh /etc/openvpn/dh.pem
keepalive 10 120
client-to-client
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA 和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
duplicate-cn
#对数据进行压缩,注意Server和Client一致
comp-lzo
#定义最大连接数
max-clients 100
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,否则网络连接会先linkdown然后linkup
persist-tun
#openvpn状态log,定期把openvpn的一些状态信息写到文件中
status openvpn-status.log
log /var/log/openvpn.log
#每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
log-append /var/log/openvpn.log
#相当于debug level,可选0-9,具体查看manual
verb 3
server 10.255.5.0 255.255.255.0
#维持一个客户端和virtual IP的对应表,以方便客户端重新连接可以获得同样的IP
ifconfig-pool-persist ipp.txt
#若客户端希望所有的流量都通过VPN传输,则可以使用该语句
#其会自动改变客户端的网关为VPN服务器,推荐关闭
#一旦设置,请小心服务端的DHCP设置问题
;push "redirect-gateway"
#服务端push “服务器所在网络地址 子网掩码”
;push "route 10.254.1.0 255.255.0.0"
push "route 192.168.9.0 255.255.255.0"
push "dhcp-option DNS 202.96.209.5"
push "dhcp-option DNS 114.114.114.114"
#网桥模式
#server 10.8.0.0 255.255.255.0
#server-bridge 192.168.200.1 255.255.255.0 192.168.200.202 192.168.200.205 #客户端拨入后用于分配的地址
4 其他配置
mkdir -p /var/log/openvpn/
service openvpn start
chkconfig openvpn on
# nano /etc/sysctl.conf
找到net.ipv4.ip_forward = 0
把0改成1
# sysctl -p
设置iptables(这一条至关重要,通过配置nat将vpn网段IP转发到server内网)
# iptables -t nat -A POSTROUTING -s 10.255.5.0/24 -o eth0 -j MASQUERADE
设置openvpn端口通过:
# iptables -A INPUT -p UDP --dport 11900 -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
重启iptables:
注:这里提一下,INPUT策略是执行后即时生效的,POSTROUTING需要保存并重启服务才能生效
# service iptables save
# service iptables restart
配置iptables开机启动
# chkconfig iptables on
5 使用密码
wget http://openvpn.se/files/other/checkpsw.sh
chmod +x checkpsw.sh
nano /etc/openvpn/psw-file
chmod 400 psw-file
nano /etc/openvpn/server.conf
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
client-cert-not-required
username-as-common-name
script-security 3
客户端 auth-user-pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment