Last active
July 28, 2017 03:08
-
-
Save GavinFoo/4e8d66b6890e9089e017 to your computer and use it in GitHub Desktop.
OpenVPN
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
======= 参考教程 ======= | |
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