网络管理

FreeBSD8下Bridge配置openVPN

日期:2015/6/28来源: IT猫扑网

  公司的办公网络是192.168.4.0/24,均只用单网卡eth0,通过Juniper防火墙映射公网IP上网,即内网内所有的机器的网关均是防火墙的固定IP-192.168.4.3,目前想通过外网拨号(VPN服务器IP为192.168.4.46)进公司内部局域网进行办公,另外还要求能够连通到公司内部的192.168.10.0、192.168.20.0、192.168.21.0网段的服务器,要求比之前复杂;而同事们的拨号环境又一样,有的是小区环境,有的是ADSL,还有的是电信3G无线上网;我将大家的需求归纳了下,即:

  一、要求能够在ADSL拨号或小区环境下顺利的VPN到公司的openVPN服务器中;

  二、公司的办公环境是192.168.4.0,拨上来要求能够连到192.168.21.0,192.168.20.0,192.168.10.0的服务器网段;

  三、公司的网络环境已定型,不可能在路由器或防火墙上作更改;

  四、考虑到路由穿透的问题,即最低限度要做到局对局。

  基于以上考虑,我们准备采取openVPN的网桥模式。

  公司的办公拓补很简单,如下图:

  以下资料参考chinaunix网友温占考的翻译文章,特此注明。

  ◆使用路由还是桥接的VPN?

  路由和桥接的主要不同参看FAQ,桥接的详细信息参看Ethernet Bridging。总的来说,路由对大多数人来说是一种更好的方式,因为它比桥接效率更高也更容易设置(仅OpenVPN配置文件本身)。路由还可以给每个客户端设置不同的访问权限。推荐使用路由,除非你需要使用依赖于桥接的特性,比如:VPN需要处理非IP协议,例如IPX协议。在VPN上运行的程序依赖于网络广播(例如局域网游戏)。不建立Samba或WINS服务器,而允许在VPN上浏览Windows共享文件。

  ◆TUN设备和TAP设备的不同?

  TAP设备是一块虚拟的以太网卡,TUN设备是一个虚拟的点到点IP链接。

  ◆什么是桥接?

  桥接是在一个子网上创建一个虚拟的、广域的以太网LAN一种技术。桥接的实践信息,参看Ethernet Bridging Mini-HOWTO,形象的解释就是它就是连通不同局域网的桥梁,当外网用户VPN过来时,如果能够连通openVPN机器,那么openVPN能够连通的机器,外网用户都应该能够连通。

  ◆桥接和路由的不同?

  桥接和路由是通过VPN连接系统的两种方法。

  桥接的优点:广播可以穿越VPN--允许依赖局域网广播的软件运行,比如Windows的NetBIOS文件共享和网上邻居。无需配置路由:可以和以太网上的任何协议一起工作,包括IPv4, IPv6, Netware IPX, AppleTalk等等。

  Relatively easy-to-configure solution for road warriors.

  桥接的缺点:比路由效率低,扩展性不太好。

  路由的优点:高效和可扩展、更好的MTU调节

  路由的缺点:要使跨越VPN的网络浏览工作,客户端必须使用一个WINS服务器(比如samba)。必须设置连接每一个子网的路由。依赖于广播的软件不能看到在VPN另一边的机器。仅支持IPv4, 如果连接两边的tun驱动明确支持IPv6,则也支持IPv6.

  ◆桥接和路由在配置上有什么不同?

  当客户端通过桥接方式连接远端网络时,它被分配一个远端物理以太子网的IP地址,从而能够和远端子网其它机器交互就象它是连接在本地一样。桥接需要特殊的OS-相关的工具用来将物理以太网卡和虚拟的TAP设备桥接起来。在Linux下,brtcl就是这样一个工具。

  对于Windowx XP或更高版本,从"控制面板->网络连接"中选中TAP-Win32网卡和以太网卡,点击鼠标右键,选择轿接。而客户端通过路由方式连接时,它使用自己的独立子网, 并且在客户机和远端网关上都设置了路由,从而可以使数据包无缝地穿越VPN。客户端可以不只是一台机子,它可以是几台机子组成的一个子网。

  桥接和路由很相似,主要的不同是路由的VPN不传送IP广播包,但是桥接的VPN传送IP广播包。

  要使用桥接方式,连接的两端都必须使用--dev tap,如果使用路由方式,可以使用--dev tap也可以使用--dev tun,但是连接的两端必须一致. 对于路由方式而言,--dev tun的效率要更高一些。

  Ethernet Bridging

  桥接概览

  以太网桥接将一个以太网接口和一个或多个虚拟TAP接口结合(combine)并将它们桥接为一个桥接接口。以太网桥接代表一个物理以太网交换机 (switch)的软件模拟,以太网桥可以 认为是在一台机器上共享一个IP子网连接多个以太网卡(物理的或虚拟的)的软件交换机,

  通过将在不同地方的一个物理以太网卡和一个OpenVPN的TAP接口桥接,可以将两个以太网络在逻辑上合并为好象是一个以太子网。

  一、这里交待下openVPN的操作系统及网络分配等。

  openVPN服务器采用64bit的FreeBSD8,分配的IP为192.168.4.46,通过防火墙NAT上网,网关为192.168.4.3,单网卡,无公网IP;Freebsd8下配置网卡跟linux一样,用脚本控制较简单,脚本如下:

  [root@openvpn ~]# cat /root/addbr0.sh

  #!/bin/sh

  kldload if_tap

  ifconfig bridge0 create

  ifconfig bridge0 addm re0

  ifconfig bridge0 192.168.4.241  netmask 255.255.255.0  broadcast 192.168.4.255

  /usr/local/sbin/openvpn --config /usr/local/etc/server.conf --daemon openvpn

  ifconfig bridge0 addm tap0

  ifconfig bridge0 deletem tap0

  /usr/local/sbin/openvpn --config /usr/local/etc/server.conf --daemon openvpn

  ifconfig bridge0 addm tap0

  这里说明一下,跟bridge0分配的也是192.168.4.0网段的机器,这里我看网上大部分的文章都是用IP,即192.168.4.46,我建议另一个IP配置,这个IP不能跟局域网的IP发生冲突,脚本成功运行后,可用命令ifconfig 检查下,成功的配置应该如下:

  二、安装过程我简略带过,不会的朋友请参考googel的相关搜索结果或我的上一篇文章《实路出真知 配置openVPN时应该注意的事项》,Server端的配置如下,这是重头戏,相关语法我会详细介绍。

  [root@openvpn ~]# cat /usr/local/etc/server.conf | grep -v "^#" | grep -v "^;"  | sed '/^$/d'

  port 1194

  proto udp

  dev tap0

  ca   /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/keys/ca.crt

  cert /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/keys/server.crt

  key  /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/keys/server.key  # This file should be kept secret

  dh /usr/local/src/openvpn-2.0.9/easy-rsa/2.0/keys/dh1024.pem

#p#副标题#e#

  ifconfig 192.168.4.241  255.255.255.0

  server-bridge 192.168.4.241 255.255.255.0 192.168.4.244 192.168.4.246

  push "redirect-gateway"

  client-to-client

  keepalive 10 120

  comp-lzo

  user nobody

  group nobody

  persist-key

  persist-tun

  status openvpn-status.log

  log-append  openvpn.log

  verb 3

  以上脚本运行时已成功启动了openVPN,并分配了网桥bridge0地址--192.168.4.241,可用命令lsof  -i:1194检验下。

  这里我将server.conf详细参数说明下,这里也是用bridge配置的重点

  ;locala.b.c.d ##申明本机使用的IP地址,也可以不说明

  port1194 ##申明使用的端口,默认1194

  ;prototcp ##申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议

  proto udp

  dev tap ##申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备

  ;devtun

  ;dev-nodeMyTap #windows下需要像这样指定设备名

  ##OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法

  ca /user/local/src/openvpn-2.0.9/easy-rsa/keys/ca.crt

  #Server使用的证书文件

  cert /usr/local/src/openvpn-2.0.9/easy-rsa/keys/server.crt

  #Server使用的证书对应的key,注意文件的权限,防止被盗

  key /usr/local/src/openvpn-2.0.9/easy-rsa/keys/server.key

  #This file should be kept secret

  #CRL文件的申明,被吊销的证书链,这些证书将无法登录

  crl-verify vpncrl.pem

  #上面提到的生成的Diffie-Hellman文件

  dh /user/local/src/openvpn-2.0.9/easy-rsa/keys/dh1024.pem

  #防止openvpn重新启动后"忘记"Client曾经使用过的IP地址

  ifconfig-pool-persistipp.txt

  #Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里

相关文章

相关下载

网友评论

我要评论...
    没有更早的评论了
    取消