FreeBSD(8.1) 下的 OpenVPN(2.2.1) 做 Server,pfSense(1.2.3) 做 Client
可算是弄好了…可算是脱了三层皮了都~
按印象大致做个笔记,下次可别忘了.
首先按常规方式装好FreeBSD,然后自定义内核,在自定义内核里边添加如下内容:
# Enable IPFireWall options IPFIREWALL options IPDIVERT options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_VERBOSE
为新内核添加ipfw和nat功能.然后重新编译内核.
然后用Ports的方式安装OpenVPN.把openvpn加入到rc.conf中:
openvpn_enable="YES"
把gateway也打开:
gateway_enable="YES"
再在rc.conf中加入相关ipfw和nat的设置:
# ipfw firewall_enable="YES" firewall_type="OPEN" # nat # em0是openvpn服务器上两块网卡中一块接入内网的网卡 natd_interface="em0" natd_enable="YES" natd_flags="-f /etc/natd.conf"
openvpn中做证书的部分需要用到bash这个Shell,所以要另外安装一个bash shell
cd /usr/ports/shells/bash make install clean
然后在vipw里边把root的shell改为/usr/local/bin/bash
注销之后重新登录,用
echo $SHELL
命令看看有没有生效,确认没有问题,就继续下一步.
关于证书的生成细节不太记得了,以下是从网上摘抄的…
openvpn的安装文件在/usr/local/share/doc/openvpn/easy-rsa/2.0
cd /usr/local/share/doc/openvpn/easy-rsa/2.0 ee vars
把里边的有关区域的信息改一改就成,如:
export KEY_COUNTRY="CN" ...
之类的,别留空.
然后执行:
./vars
再清除所有的key:
./clean-all
建立root的证书,ca和key
./build-ca
./build-key-server server
再生成客户端用的key
./build-key client1
./build-dh
生成的文件在/usr/local/share/doc/openvpn/easy-rsa/2.0/keys这个文件夹里边,等到后边我们设置openvpn client的时候,刚才生成的client1.crt,client1.csr,client1.key可以用得着.
然后到openvpn的配置文件里边,对openvpn的配置文件进行修改.默认的它的配置文件夹是/usr/local/etc/openvpn,其中我的openvpn.conf的内容如下:
more /usr/localetc/openvpn/openvpn.conf
# 外网的ip地址 local 222.222.222.222 port 1194 proto udp dev tun ca /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/ca.crt cert /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server.crt key /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server.key dh /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/dh1024.pem # 设置vpn的子网 server 192.168.101.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 192.168.100.0 255.255.255.0" keepalive 10 120 comp-lzo user nobody group nobody persist-key persist-tun status openvpn-status.log script-security 3 verb 3
然后重启机器或用命令启用openvpn:
reboot
或
/usr/local/etc/rc.d/openvpn start
如果启动成功的话,会有如下提示:
Starting openvpn. add net 192.168.101.0 gateway 192.168.101.2
之类的字样.
相关openvpn的服务器端部分已经完成了,现在是client部分.
在这里,我们选择同样是基于freebsd的pfSense来做client的路由.
先安装好一个pfSense,在VPN-OpenVPN-Client的位置,点增加按钮,主要需要设置的内容是:
Protocol选择udp
Server address输入openvpn服务器的外网ip
Server port输入1194(如果你没改过的话,这里应当跟openvpn服务器端设置的一样)
Interface IP输入192.168.101.0/24(输入vpn的子网网段)
Authentication method选择PKI(Pubic Key Infrastructure)
CA certificate输入刚才生成的ca证书的内容
Client certificate输入刚才生成的客户端证书内容
证书内容是指:
以
—–BEGIN CERTIFICATE—–
开头并以
—–END CERTIFICATE—–
结尾的那部分
Client key输入client.key的内容,这部分内容是指:
以
—–BEGIN RSA PRIVATE KEY—–
开头并以
—–END RSA PRIVATE KEY—–
结尾的那部分
给LZO compression打上钩,然后在Description中备注一下Save就可以了.
在Interfaces-(assign)这部分,可以将生成的tun0端口绑定到OPT1
在Interfaces-OPT1中,将Enable Optional 1 interface打上钩,它的IP configuration里边,可以进行一下设置:
Bridge with选择none
IP address输入192.168.101.0/32
Gateway输入192.168.102.1(client内网网关)
在Firewall-Rules-WAN部分,对进入子网的UDP部分进行放行
UDP ServerIP 1194 Lanaddress * *
OPT1中也全部放行吧…
一般来说,到了这一步openvpn应该是通了,可以在Status-System logs-OpenVPN中查看相关信息,如果在最后一行看到:
Initialization Sequence Completed
那就是通了.
现在在客户端可以ping通openvpn服务器的内网ip了,不过客户端还不能访问openvpn服务器所在网段的其它机器,所以需要在openvpn的服务器端做nat转发,把从vpn客户端过来的访问请求向内网进行转发.
在openvpn服务器进行设置.
编辑/etc/natd.conf,增加如下内容:
redirect_port tcp 192.168.100.30:80 80 redirect_port tcp 192.168.100.19:1433 1433
然后再重启openvpn.
Edit:原来启用了natd就直接可以了,不需要另外再指定地址和端口了.
如果使用openvpn client for windows的客户端需要使用OpenVPN的话,关键是对于获取的IP要进行控制,如果不控制,一旦获取了一样的IP,VPN网络就会出现问题.
设置方法如下:
修改服务器端的openvpn.conf,加入
client-config-dir ccd
这一行,它的意思是指定客户端配置文件文件夹,如果在openvpn.conf所在目录没有ccd这个文件夹,就新建一个,然后在里边建立一个跟客户端名字一样的文件,内容如下:
ifconfig-push 192.168.101.5 192.168.101.6
这样的原因是,openvpn只支持255.255.255.252的子网,并且这个252的子网只有两个IP,一个是分配给客户端,一个是分配给服务器.
20111122更新:
我现在的OpenVPN服务器是架设在FreeBSD 8.2上边的,版本是2.2.1.
前些天,公司另外一处办公室也需要使用OpenVPN客户端,为了图新鲜和方便,就直接从pfsense官网上边下载了最新版本2.0,然后很顺利的安装配置完毕.
pfsense的openvpn的配置跟之前的1.2.3的版本有些不太一样,比如说那些输入Key的地方,都集中在叫Certificate Management的地方了.配置起来跟之前的1.2.3区别不是太大.
配置完成之后,启动通道,在OpenVPN的Logs里边能看到Initialization Sequence Completed的字样,在Interfaces里能看到ip等信息,从Shell里边也能Ping通openvpn的网段.可路由就是无法完成,也就是说无法把vpn的网段路由到内网网段中去,在日志里边能看到类似route delete和route add之类的报错,前前后后检查了很久,也改了很多地方的配置…均没办法搞定,只好放弃.然后花10分钟装回1.2.3的旧版,配置完毕之后,一切正常…
这个是不是就能说明新版本的pfsense跟openvpn 2.2.1有冲突啊?-_-!