专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Unix/FreeBsd » openvpn:FreeBSD下Openvpn(2) »正文

openvpn:FreeBSD下Openvpn(2)

来源: 发布时间:星期二, 2008年12月9日 浏览:2次 评论:0
图2 指定VPN 的虚拟IP 地址对

给server.confi 添加如下行:
[Copy to clipboard] [ - ]
CODE:
client-config-dir ccd

并在vpn server 的/etc/openvpn 目录建立ccd 子目录,并在ccd 目录下建立文件client1,client2,client3(这里的文件名对应”为vpn clients 产生证书和密钥”步骤里的Common Name),当对应得client 连接时,vpn server 会读去对应文件里的配置信息。文件client1 里输入:
[Copy to clipboard] [ - ]
CODE:
ifconfig-push 10.0.0.5 10.0.0.6

,即给vpn client1 指定10.0.0.5,对端10.0.0.6 的虚拟链路。
client2 内容:
[Copy to clipboard] [ - ]
CODE:
ifconfig-push 10.0.0.9 10.0.0.10

client3 内容:
[Copy to clipboard] [ - ]
CODE:
ifconfig-push 10.0.0.13 10.0.0.14

分别拷贝server.conf,client1.conf,client2.conf,client3.conf 到vpn server 和对应的client。分别在各个vpn 计算机启动vpn server 和vpn client
openvpn --config /etc/openvpn/server.conf --cd /etc/openvpn/
openvpn --config /etc/openvpn/client1.conf --cd /etc/openvpn/等
如果是Windows,改.conf 为.ovpn,然后右键选择Start OpenVPN on this config file 即可
启动。
如果都出现“Initialization Sequence Completed”表示VPN 建立成功,否则检查vpn server的防火墙是否屏蔽了UDP 1194 端口。如果客户端是Windows,检查DHCP Client 服务是否启动。到这一步,VPN 客户端和服务端可以相互通讯了。10.0.0.1 应该可以ping 通10.0.0.5,10.0.0.9,10.0.0.13。10.0.0.5,10.0.0.9,10.0.0.13 也可以ping 通10.0.0.1。但10.0.0.5,10.0.0.9,10.0.0.13 还不能相互ping 通,即vpn 客户端之间还不能相通。

5.1 vpn client 访问vpn server 所在192.168.10.0/24 网段内计算机
第一种方法,添加如下行到server.conf
[Copy to clipboard] [ - ]
CODE:
push "route 192.168.10.0 255.255.255.0"

push 选项是把选项内容给连接的vpn 客户端执行,也就是在vpn 客户端执行“route 192.168.10.0 255.255.255.0”,即当client 连接时,添加路由到client 的路由表里。对于vpn client1,该选项相当于在vpn client1 的路由表里添加到网络192.168.10.0/24,下一跳为10.0.0.6的路由,这里10.0.0.6 为给vpn client1 分配的虚拟IP 对的服务器端IP,相当于路由到vpn server。
第二种方法,如果不改变server.conf,在vpn client1 里route add –net 192.168.10.0 10.0.0.6 255.255.255.0 效果一样,也可route add –net 192.168.10.0 10.0.0.1 255.255.255.0 直接路由到vpn server 的本端IP 也可,但这样需要在所有的vpn 客户端改变路由表。
这样在vpn 客户端可以ping 通192.168.10.0/24 网段内部计算机了。到此,B,C,D 房间的
网关可以访问A 房间的所有计算机了。

5.2 vpn server 访问vpn client 网段内计算机
以vpn client1 为例,是vpn server 能访问192.168.11.0/24 网段内计算机。同样有2 种方法,一是改server.conf 让openvpn 程序添加路由,另一种是手动添加路由。
第一种方法,添加如下行到server.conf
[Copy to clipboard] [ - ]
CODE:
route 192.168.11.0 255.255.255.0

从OpenVPN 的man 手册可知,route 选项用于改变路由表。这里在vpn server 添加到网络192.168.11.0/24,下一跳为10.0.0.2 的路由,即把192.168.11.0/24 路由到openvpn 内部。然后添加如下行到/etc/openvpn/ccd/client1
[Copy to clipboard] [ - ]
CODE:
iroute 192.168.11.0 255.255.255.0

告诉openvpn 192.168.11.0/24 的网段路由到vpn client1。route 选项用于修改从操作系统内核到OpenVPN 服务端的路由,iroute 用于控制OpenVPN 服务端到OpenVPN 客户端的路由。现在从vpn server 或者其内部192.168.10.0/24 内机器都能ping 通192.168.11.0/24 内部的机器了。
第二种方法,手动修改vpn server 路由表,route add -net 192.168.63.0 10.0.0.2
255.255.255.0 或者route add -net 192.168.63.0 10.0.0.5 255.255.255.0然后添加iroute 192.168.11.0 255.255.255.0 到/etc/openvpn/ccd/client1(注意:两种方法都必须有这一步)。
可以明显看到修改OpenVPN 配置文件的方法要简便些,不用顾及VPN 计算机分配的虚拟IP,对于多个VPN 客户端,只需要修改server.conf 即可,而且路由条目都是建立VPN时动态添加,VPN 断开时自动删除。本文选择这第一种方法配置VPN。提到两种方法是想说明OpenVPN 里的选项对于操作系统路由的影响,用于对比,更能理解OpenVPN 的选项。
vpn client2 和vpn client3 的修改类似vpn client1。总结所有修改如下:
添加如下行到server.conf
[Copy to clipboard] [ - ]
CODE:
route 192.168.11.0 255.255.255.0 #使vpn server 能访问B 房间计算机
route 192.168.12.0 255.255.255.0 #使vpn server 能访问C 房间计算机
route 192.168.13.0 255.255.255.0 #使vpn server 能访问D 房间计算机

添加如下行到vpn server 里/etc/openvpn/ccd/client1
[Copy to clipboard] [ - ]
CODE:
iroute 192.168.11.0 255.255.255.0 #B 房间计算机路由到client1

添加如下行到vpn server 里/etc/openvpn/ccd/client2
[Copy to clipboard] [ - ]
CODE:
iroute 192.168.12.0 255.255.255.0 #C 房间计算机路由到client2

添加如下行到vpn server 里/etc/openvpn/ccd/client3
[Copy to clipboard] [ - ]
CODE:
iroute 192.168.13.0 255.255.255.0 #D 房间计算机路由到client3

到这一步,A 房间的计算机能访问B,C,D 房间的所有计算机了,B,C,D 房间的计算机
也能访问A 房间的计算机了。

5.3 各个vpn client 之间的网段相互访问
下面配置B,C,D 房间的计算机相互访问。
添加如下行到server.conf:
[Copy to clipboard] [ - ]
CODE:
client-to-client

这样B,C,D 房间的网关(即10.0.0.5,10.0.0.9,10.0.0.13)可以相互ping 通了。现在B,
C,D 房间的网关还没有到相互内部网段的路由。类似上面push vpn 服务端的内部网段到vpn
客户端,添加如下行到server.conf
[Copy to clipboard] [ - ]
CODE:
push "route 192.168.11.0 255.255.255.0"
push "route 192.168.12.0 255.255.255.0"
push "route 192.168.13.0 255.255.255.0"

分别在vpn client1,vpn client2,vpn client3 添加3 条路由,对于vpn client1,192.168.11.0/24是其内部网段, vpn client1 上的openvpn 程序不会执行"route 192.168.11.0 255.255.255.0"选项,可以从openvpn 启动的信息看出。同上面一样,也可以手动修改3 个VPN 客户端的路由表,这里就不说了。到这一步,A,B,C,D4 个房间的计算机都可以相互访问了。

6 配置出国和非出国数据的路由(只是理论想法,由于所在校园网还没通,没有测试)
A房间网关,即vpn server,使用可以上国外网的802.1X 帐号,3 个vpn client3 使用只能上国内网的帐号。在server.conf 中利用push 选项在vpn 客户端添加路由,把国外IP 地址路由到vpn server,并通过vpn server 的NAT 出去,不需要修改vpn 客户端设置。这样,vpn客户端所在的B,C,D 房间的计算机上国内网直接通过他们的网关出去,上国外网则路由到A 房间网关再出去。A 房间的上网数据都通过A 房间网关出去。当然,也可以不修改server.conf,直接在3 个vpn 客户端手动添加路由。
添加如下行到server.conf:
#下面是国外网络的网段
push "route xxx.xxx.xxx.xxx 255.255.255.0"
……..

7 总结
在vpn server 的/etc/rc.local 文件添加如下行:
openvpn --config /etc/openvpn/server.conf --cd /etc/openvpn/ &
在vpn client1 的/etc/rc.local 文件添加如下行:
openvpn --config /etc/openvpn/client1.conf --cd /etc/openvpn/ &
vpn client2 和vpn client3 类似vpn client1。使openvpn 程序在系统启动时自动运行。
修改vpn server 的防火墙配置,我使用ipfw 防火墙。添加如下规则允许通过vpn server
的侦听端口。
pass in quick on rl0 proto udp from any to any port = 1194 keep state
在vpn server安装Apache+phpBB为内部论坛,4 个房间所有计算机浏览http://10.0.0.1即可
访问。在vpn client1 安装Samba做文件共享服务器,浏览\\10.0.0.5即可访问到共享。打印机
安装在A房间的内部Windwos计算机上,通过共享安装网络打印机即可。
这样完成了所有的配置。下面总结如下:
vpn server 的目录/etc/openvpn 下有文件ca.crt,ca.key,dh1024.pem,server.crt,server.key和server.conf 以及子目录ccd。/etc/openvpn/ccd 目录下有文件client1,client2 和client3。
/etc/openvpn/server.conf 内容如下:
[Copy to clipboard] [ - ]
CODE:
;local a.b.c.d
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server 10.0.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
client-config-dir ccd
#使vpn clients 能访问[ft=,,Times]vpn server 半

如果本文没有解决您的问题,请进老妖怪开发者社区提问

标签:openvpn

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: