1, 搭建环境:
电脑A : win7 64bit, 作为openvpn server
网上下载openvpn安装包,直接安装。
网口1, 有线网络,可以访问外网
网口2 ,无线网络,只有局域网,没有外网,和客户端基于这个通信
电脑B : ubuntu 12.04 64bit , 作为openvpn client
从git下载最新的openvpn代码,编译安装
网口1, 无线网络,无外网。
2, 搭建服务器
2.1 参考网上的文章,通过在命令行创建 各个证书和私钥。下面的名字不是固定,后面在客户端和服务器的配置文件上都会用到。
文件名 | 需要者 Needed By | 说明 Purpose | 秘密 Secret |
ca.crt | 服务端和所有客户端 server + all clients | 根证书 Root CA certificate | NO |
ca.key | 签发私钥的机器 key signing machine only | 根私钥 Root CA key | YES |
dh{n}.pem | 服务器 server only | Diffie Hellman parameters | NO |
server.crt | 服务器 server only | 服务器证书 Server Certificate | NO |
server.key | 服务器 server only | 服务器私钥 Server Key | YES |
client1.crt | client1 only | Clinet1的证书 Client1 Certificate | NO |
client1.key | client1 only | Clinet1的私钥 Client1 Key | YES |
2.2 编辑服务器的配置文件server.ovpn:
port 1194 # 服务器的端口
proto udp #使用的协议
dev tap #创建的隧道类型,tap是2层协议, tun是3层协议,如果要做internet转发需要用tap,原因还没理解
ca ca.crt #依据上面生成的证书
cert server.crt
key server.key
dh dh1024.pem
server 192.168.55.0 255.255.255.0 #服务器和客户端配置的虚拟网段
ifconfig-pool-persist ipp.txt #服务器给客户端分配ip后,将ip保存到ipp.txt, 下次分配ip还是用这个
#tls-auth ta.key 0 # 0: 服务端, 1:客户端 , 开启TLS
keepalive 10 120 # 保活心跳时间,和超时时间
comp-lzo #开启vpn 连接压缩
client-to-client #允许客户端和客户端连接
persist-key
persist-tun #持久或选项可以尽量避免访问在重启时由于用户权限降低而无法访问某些资源
verb 3 #日志文件等级
push "route 0.0.0.0 0.0.0.0" #向client推送路由,网关,dns信息,否则client端可能因为首选路由,网关,dns不对导致无法访问服务器或网络
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 221.5.88.88"
2.3 启动服务器后,查看服务器的状态串口,确认连接状态,以及有没有正确分配到虚拟网络的ip
2.4 配置服务器端的nat,否则无法访问外部网络,只能访问内网。
配置方法: 网络和共享中心 -》 更新适配器设置, 找到能正常连接外网的连接,右键属性查看 共享页面里面选中允许其他网络用户通过此计算机的internet 连接来连接,并在下面的里面里面选中生成的虚拟网络接口
3, 搭建客户端
3,1 将客户端需要的证书文件拷贝到一个配置文件目录
3,2 编辑client.conf文件, 基本配置和server一样,
client # 说名是客户端配置
proto udp
dev tap
remote 192.168.11.128 1194 #服务器的地址和端口
resolv-retry infinite #一直重连
nobind #不绑定指定端口
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
#tls-auth ta.key 1
comp-lzo
verb 3
#up ./home.up
script-security 2 #配置脚本执行权限
up update-resolv-conf.sh #配置up/down的时候执行的脚本,这个脚本可以在git上下载,但是脚本里面的resolvconf命令的参数不对,需要简单修改。
down update-resolv-conf.sh
4, 注意事项
4.1 配置文件里面的设备要写成tap, 否则和服务器上的内网都无法通信, 只能点对点通信
4.2 我的linux和window 是用了一个wifi路由器来连到同一个网络的,(vpn就是基于这个网络来搭建的)需要注意选用的路由器,有的路由器如果没有连接外网,不会将一些数据包转发,导致连接外网一直有问题
4.3 配置文件里面要执行的脚本一定要带 #!/bin/bash 的头部,否则会无法执行
4.4 多网口的服务器,和客户端通信的网络不能设置网关--这个可能只针对我的环境
4.5 服务器要配置那些push命令,否则客户端获取到ip后,但是你的默认路由什么的还是不对,无法通信
首次写文章,哪里不好请指正。