最近公司的VPN-PPTP出问题了,老是连接到VPN客户端就不能上网,上网就不能和其他内网节点通讯,最后逼的没办法了,换了Openvpn,整了两天,期间让峰哥给我补习了一大堆的网络知识,终于OK了;话不多说,开撸。。。
Openvpn是什么
将两个不同的网段打通一条通道,可以互相访问,对于运维人员来说主要是为了安全,因为OpenVPNssl加密机制,增加了密码的安全度,运维人员可以自定义ip段进行管理服务器,简单点说,安全方便。
查看系统环境
CentOS release 6.7 (Final) 2.6.32-573.26.1.el6.x86_64
cat /dev/net/tun
File descriptor in bad state
安装基本的包:
yum install gcc gcc-c++
yum install -y lzo lzo-devel
yum install -y openssl openssl-devel
下载openven
mkdir /home/download
cd /home/download/
wget http://www.openvpn.net/release/openvpn-2.0.9.tar.gz
tar xf openvpn-2.0.9.tar.gz
cd openvpn-2.0.9
./configure -prefix=/usr/local/openvpn && make && make install
mkdir /etc/openvpn
cp -R /home/download/openvpn-2.0.9/easy-rsa/ /etc/openvpn
cd /etc/openvpn/easy-rsa/2.0/
vim vars
#修改最后一段
export KEY_COUNTRY="CN"
export KEY_PROVINCE="BJ"
export KEY_CITY="beijing"
export KEY_ORG="OpenVPN ORG"
export KEY_EMAIL="bob@qq.com"
脚本的作用
vars 初始化用的
clean-all #初始化key,将会删除所有keys所有文件
build-ca #生成ca证书,服务端专用
build-dh #生成Diffie-Hellman文件,服务端专有
build-key-server #生成服务器端密钥(交互)
build-key #生成客户端密钥(交互)
pkitool #脚本,直接使用vars的环境变量设置直接生成证书(非交互)
. ./vars #注意有空格
./clean-all
./build-ca
./build-dh
./build-key-server bob
cd keys
cp ca.crt ca.key bob.crt bob.key dh1024.pem /etc/openvpn/
./build-key client-bob #这两个key一定要统一
一路回车,Sign the certificate? [y/n]:y 选择y
打包,以便客户端vpn使用
cd keys/
mkdir test-key
cp ca.crt ca.key client-bob.* test-key/
tar -zcvf test-key.tar.gz test-key/
userkey/
userkey/ca.key
userkey/client-bob.key
userkey/client-bob.crt
userkey/ca.crt
userkey/client-bob.csr
配置文件
cp /home/download/openvpn-2.0.9/sample-config-files/server.conf /etc/openvpn/openvpn.conf
vim /etc/openvpn/openvpn.conf
local 192.168.56.1
proto tcp
port 1194
ca /etc/openvpn/ca.crt
cert /etc/openvpn/bob.crt
key /etc/openvpn/bob.key # This file should be kept secret
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
push "route 172.16.1.0 255.255.255.0" #添加一条内网的路由,即可访问172
server 172.16.0.0 255.255.255.0 #分配给客户的地址池
client-to-client
user nobody
group nobody
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn.log
启动
/usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/openvpn.conf
netstat -lntup|grep 1194
tcp 0 0 192.168.56.11:1194 0.0.0.0:* LISTEN 21506/openvpn
客户端
客户端主要就是安装一个exe文件,下一步下一步,把之前打包的客户端文件放入安装目录即可
客户端 配置文件改动不是很多:
proto tcp
remote 192.168.56.11 1194
user nobody
group nobody
ca ca.crt
cert client-bob.crt
key client-bob.key
设置访问局域网
目前为止,现在的客户端还是不能访问局域网的,因为没有回去的网关,大家可以用tcpdump抓一下包。要想可以访问局域网的机器有两种办法:
添加返回路由/网关
1)如果局域网客户端的默认网关是VPNserver的内网地址的话就不用设置,如果默认网关不是VPNsever那么需要添加一条命令
route add -net 10.8.0.0/24 gw 172.16.1.11(VPNserver内网网卡)
去10.8.0.0目的地址的包从172.16.1.11走
优点:配置完立竿见影
缺点:如果有多台,每个VPN客户端都需要配置网络路由(重启后失效)
2)NAT模式
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j SNAT --to 172.16.1.11
将地址池里的地址在离开防火墙的时候转成172.16.1.11,这样访问后端的节点就成了VPNserver内网与局域网内网IP之间的访问
优点:不需在每个局域网内的机器内配置网关等操作;比较便捷
缺点:需要iptables的生效(2-5分钟),不是即时稳定的,对于iptables不是很熟的话,不推荐
server 172.16.0.0 255.255.255.0 #分配的地址池
push "route 172.16.0.0 255.255.255.0" #push路由
push "redirect-gateway" #push网关
push "dhcp-option DNS 8.8.8.8" #pushDNS
push "dhcp-option DNS 192.168.56.2"
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -d 10.0.0.0/8 -j SNAT --to 内网地址
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j SNAT --to 外网地址
代理功能
目前为止,客户机虽然能上网,但是走的却是本地自己的网络,如果想要通过VPN上网还需要在配置文件中打开以下功能,很简单,就三行
参考与这位仁兄,很详细http://blog.sina.com.cn/s/blog_5790709f0101nce3.html