AppServer/

FreeBSD(8.1) 下的 OpenVPN(2.2.1) 做 Server,pfSense(1.2.3) 做 Client

发布
更新
字数
2710
阅读
6 分钟

可算是弄好了…可算是脱了三层皮了都~
按印象大致做个笔记,下次可别忘了.

首先按常规方式装好FreeBSD,然后自定义内核,在自定义内核里边添加如下内容:

bash
# Enable IPFireWall
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE

为新内核添加ipfw和nat功能.然后重新编译内核.
然后用Ports的方式安装OpenVPN.把openvpn加入到rc.conf中:

bash
openvpn_enable="YES"

把gateway也打开:

bash
gateway_enable="YES"

再在rc.conf中加入相关ipfw和nat的设置:

bash
# 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

bash
cd /usr/ports/shells/bash
make install clean

然后在vipw里边把root的shell改为/usr/local/bin/bash
注销之后重新登录,用

bash
echo $SHELL

命令看看有没有生效,确认没有问题,就继续下一步.

关于证书的生成细节不太记得了,以下是从网上摘抄的…
openvpn的安装文件在/usr/local/share/doc/openvpn/easy-rsa/2.0

bash
cd /usr/local/share/doc/openvpn/easy-rsa/2.0
ee vars

把里边的有关区域的信息改一改就成,如:

bash
export KEY_COUNTRY="CN"
...

之类的,别留空.

然后执行:

bash
./vars

再清除所有的key:

bash
./clean-all

建立root的证书,ca和key

bash
./build-ca
bash
./build-key-server server

再生成客户端用的key

bash
./build-key client1
bash
./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的内容如下:

bash
more /usr/localetc/openvpn/openvpn.conf
bash
# 外网的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:

bash
reboot

或

bash
/usr/local/etc/rc.d/openvpn start

如果启动成功的话,会有如下提示:

bash
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,增加如下内容:

bash
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,加入

bash
client-config-dir ccd

这一行,它的意思是指定客户端配置文件文件夹,如果在openvpn.conf所在目录没有ccd这个文件夹,就新建一个,然后在里边建立一个跟客户端名字一样的文件,内容如下:

bash
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有冲突啊?-_-!

评论

正在载入评论…

留下评论

人机验证
四位数字,看不清可点击图片刷新

评论经审核后显示。

回到顶部 ↑