China Open source community
站内导航:
站内排行前50热点文章

精华文章  GDB调试精粹及使用实例
普通文章  STL中map用法详解
精华文章  负载均衡软件比较(Hapr...
普通文章  头文件的重复引用
普通文章  递归函数的调用过程
普通文章  TCP三次握手/四次挥手详解
普通文章  贪心策略的理论基础——...
普通文章  BMH算法原理与实现(模...
普通文章  排列组合与回溯算法
普通文章  DP动态规划
精华文章  Android线程模型
普通文章  Linux socket编程之套接字
普通文章  Linux内核中的红黑树
精华文章  linux下使用minicom的几...
普通文章  Java开源Html解析类库
精华文章  enum类型的本质
普通文章  memcached server LRU ...
普通文章  linux设置环境变量的方法
普通文章  android核心模块及相关...
普通文章  linux源代码包(.tar.g...
普通文章  L.A.M.P配置过程
普通文章  在ubuntu9.10下安装QT4...
普通文章  C/C++程序员常见面试题...
普通文章  gcc编译过程概述
普通文章  python的memcache和jso...
普通文章  应用程序二进制接口---ABI
普通文章  linux内核编译问题
普通文章  Java多线程实现简单实例
普通文章  Python程序员常用的IDE...
普通文章  brk和sbrk详述
普通文章  优化C语言代码(程序员必...
普通文章  python非贪婪,多行匹配...
普通文章  函数指针传递和全局指针...
普通文章  Unix操作系统的历史演变
普通文章  网络编程之C10K问题
普通文章  发行版发布:CentOS 5.4
普通文章  在windows中构建gtk开发...
普通文章  i++循环与i--循环的执行...
普通文章  关于Qvariant类--万能的...
普通文章  Debian sudo 设置
普通文章  busybox1.15.x 交叉编译
普通文章  关于僵死进程zombie
普通文章  递归思想的妙用
普通文章  判断链表是否存在环并找...
普通文章  Android Porting Exper...
普通文章  关于/etc/bashrc和$HOM...
普通文章  [翻译]Django初窥
普通文章  Python list的排序
普通文章  Django实现大数据量分页...
普通文章  Debug方式取代printf满...

 
 
 
当前位置: 首页 >> 应用软件 >> 网络相关 >> OpenVPN之以太网桥接
 
 

OpenVPN之以太网桥接

作者:温占考      来源:OpenVPN.net     发表时间:2006-11-06     浏览次数:      字号:    

译者:温占考(Email: wzk<AT>wenzk<DOT>net),来源:OpenVPN.net,转载请注明译者和出处及版权信息,并且不能用于商业用途,违者必究。
由于英语水平有限,如有错误,还望指正!
时间: 2006-06-19 22:00 于 沈阳

桥接概述

查看FAQ了解路由对比桥接的概述。

以太网桥接实质上是把一个以太网络接口和一个或多个虚拟TAP接口桥接在一个网桥接口上。以太网桥表现为使用软件模拟一个真实的以太网交换机。以太网桥可以理解为一种能够用来连接一个机器上的多个以太网接口(无论是物理的还是虚拟的)使它们共享一个IP子网的软件交换机。

把分布在两个独立网络的一个物理的以太网NIC和一个OpenVPN所使用的TAP接口桥接起来,这样就可以逻辑上合并两个以太网络,就像它们在一个以太网子网内。

配置桥接

这个例子将指导你配置一个OpenVPN服务器端的桥接。多个客户将会连接到这个网桥上,并且每个客户机的TAP接口将会分配到一个服务器端LAN网段的IP地址。

下面是两个实现客户IP地址分配的方法:

  • OpenVPN使用server-bridge指示来管理其客户的IP地址池,或者
  • LAN内配置DHCP服务器让其为VPN客户分配IP地址。

在这个例子中,我们将使用第一个方法即OpenVPN服务器管理其客户在LAN子网内的IP地址池,和DHCP服务器使用的地址池分开(如果存在的话)。两种方法在FAQ item都有详细描述。

在我们的例子中,我们将使用下面的网桥配置:

设置

网桥启动 参数

取值

以太网络接口

eth

eth0

本地IP地址

ip

192.168.8.4

本地子网掩码

eth_netmask

255.255.255.0

本地广播地址

eth_broadcast

192.168.8.255

VPN客户地址池

 

192.168.8.128 to 192.168.8.254

虚拟网桥接口

br

br0

虚拟TAP接口

tap

tap0

第一步是按照HOWTO中的“开始使用VPN并且测试其连通性(Starting up the VPN and testing for initial connectivity)”章节。然后,根据你是在LinuxWindows下配置桥接继续配置。

Linux上配置桥接服务器

首先,确认你已经安装了bridge-utils软件包。

编辑下面的bridge-start(启动网桥)脚本。根据你要桥接的物理网络接口设置br, tap, eth, eth_ip, eth_netmask, eth_broadcast 参数。确认使用一个内部网络接口并且是连接在一个受防火墙保护的LAN内。你可以使用Linuxifconfig命令获得网络接口的一些必要的信息来完成bridge-start(启动网桥)参数。

现在就运行bridge-start脚本。脚本将会创建一个永久[译者注:永久意为系统重新启动前永久,默认虚拟接口在OpenVPN退出后就消失]tap0网络接口并且已经和以太网接口桥接成功了。

下一步,我们将要编辑OpenVPN server configuration fileOpenVPN服务器端配置文件)来使能桥接配置。

注释掉dev tun这行行并且替换成:

dev tap0

注释掉以server开始的行并且替换成:

server-bridge 192.168.8.4 255.255.255.0 192.168.8.128 192.168.8.254

现在设置Linux防火墙使之允许数据包通过新建的tap0 br0接口:

iptables -A INPUT -i tap0 -j ACCEPT

iptables -A INPUT -i br0 -j ACCEPT

iptables -A FORWARD -i br0 -j ACCEPT

OpenVPN桥接现在能够通过下面顺序来启动和停止:

  • 运行 bridge-start
  • 运行 openvpn
  • 停止 openvpn
  • 运行 bridge-stop

到目前为止,桥接的配置就完成了,你可以continue where you left off in the HOWTO(根据HOWTO继续完成剩下部分)。

Windows XP中配置桥接服务器

这个配置在桥接端需要Windows XP或更高版本系统。据我所知,Windows 2000不支持桥接,然而Windows 2000系统可以是一个桥接网络的客户,而OpenVPN另一端的桥接是在LinuxWindows XP系统上实现的。

Windows上安装OpenVPN时,安装程序将自动创建一个名为“本地连接2”的TAP-Win32适配器。转到控制面版中的网络连接下并且改名为“tap-bridge”。

接下来使用鼠标选择tap-bridge和以太网适配器,点击鼠标右键,并且选择桥接(Bridge Connections。这样就在控制面板中创建了一个新的桥适配器图标。

在桥适配器的TCP/IP属性里配置IP地址192.168.8.4子网掩码255.255.255.0

接下来,编辑OpenVPN server configuration fileOpenVPN服务端配置文件) 使能桥接配置。

注释dev tun这行且替换成:

dev tap

dev-node tap-bridge

注释以server开始的行并且替换成:

server-bridge 192.168.8.4 255.255.255.0 192.168.8.128 192.168.8.254

如果你的系统时XP SP2,进入防火墙配置控制面板,并且禁用桥适配器和TAP适配器上的包过滤功能。

到目前为止,桥接的配置就完成了,你可以continue where you left off in the HOWTO(根据HOWTO继续完成剩下部分)。

配置桥接客户端

sample OpenVPN client configurationOpenVPN客户配置)基础上进行配置。注释dev tun的行且替换成:

dev tap

最后,确认客户端的配置文件和服务器端的配置文件是否一致。需要着重注意的是proto (udp or tcp)选项是否一致。同样如果使用了comp-lzo fragment确认客户端和服务器端是否一致。

以太网桥接说明

使用以太网桥接配置时,第一步是构造以太网桥--一种虚拟网络接口是其他网络接口的一个容器,可以是物理的NIC也可以是虚拟的TAP接口。以太网桥接口必须在OpenVPN启动之前创建。

没有通用的网桥配置方法--每个OS有自己的配置方法(见下面例子)。

网桥接口一旦被创建,并且以太网接口加入到网桥中,OpenVPN就可以启动了。

  • 网桥接口是一种由一个或多个以太网络接口组成的虚拟网络接口,这些以太网络接口可以是物理网络接口或OpenVPN所使用的虚拟TAP接口。
  • 当你配置以太网桥接接口时,你需要手工设置网桥接口的IP地址和子网掩码并且不要在OpenVPN配置文件中使用ifconfig选项来配置。这是因为与TUN/TAP接口不一样,OpenVPN程序不能配置网桥接口的IP地址和子网掩码。
  • OpenVPN配置文件应该通过dev选项来指定已经加入网桥TAP接口,而不是指定网桥接口的名字。
  • 对于Windows系统,使用dev-node选项来指定已经加入网桥TAP-Win32适配器(dev-node这个名字是网络连接控制面板上显示的名字)。
  • Linux/BSD/Unix系统中,对于dev tap选项,使用你已经加入网桥的TUN/TAP的序号如dev tap0
  • 如果你的OpenVPN工作在点对点模式,去掉ifconfig选项,如果你使用的是客户/服务器模式,在服务器端使用server-bridge选项。
  • 桥接的时候,你必须手工设置网桥接口的TCP/IP设置。例如在Linux中,可以使用ifconfig命令配置而在Windows XP中可以通过配置网络连接面板中网桥接口的TCP/IP属性来实现(在Windows XP和更高版本的网络连接面板中可以通过鼠标操作来实现桥接)。
  • 确定只有桥接的TAP接口和内部以太网络接口是被防火墙保护的。不要把TAP接口和连接互联网的网络接口进行桥接,这样可能存在潜在的安全漏洞。
  • local remote 所使用的地址不能是桥接子网内的地址--否则将会出现路由环路。
  • 理解以太网桥接很重要的一点就是每个加入网桥的网络接口将会失去原有的配置如IP地址和子网掩码。只有网桥接口的TCP/IP设置有效。
  • 手工配置网桥时常见的错误是在为网桥配置IP地址和子网掩码之前把主要的以太网络适配器加入到网桥中。这就导致主要的以太网卡“丢失”了原有的配置,但是所属的网桥接口还没有配置,所以这就造成了以太网络接口的连接就丢失了。
  • 在大多数情况下,只是在服务器端配置一个可用的桥接,而不是在客户端配置。这样一来,当客户机连接上服务器后就成为了多宿主系统了,例如:它们仍然拥有原有的以太网接口,但是连接到OpenVPN服务器的上层连接,它们将会有一个新的TAP接口和服务器端的以太网接口桥接(并且有可能是所有连接到服务器的客户机的TAP接口如果在服务器的配置文件里申明了client-to-client选项)。

说明 – Windows下的以太网桥接

Check out this HOWTO by Adam Pavelec.

Windows Notes 页面有更多关于以太网桥接的说明。

说明 – Linux下的以太网桥接, 配置脚本

这些脚本将处理Linux下的网桥的启动和停止。在OpenVPN发行包的sample-scripts下可以找到。


sample-scripts/bridge-start

#!/bin/bash

 

#################################

# Set up Ethernet bridge on Linux

# Requires: bridge-utils

#################################

 

# Define Bridge Interface

# 定义网桥接口

br="br0"

 

# Define list of TAP interfaces to be bridged,

# for example tap="tap0 tap1 tap2".

# 定义需要桥接的TAP接口列表,如:

tap="tap0"

 

# Define physical ethernet interface to be bridged

# with TAP interface(s) above.

# 定义需要和TAP接口桥接的物理接口

eth="eth0"

eth_ip="192.168.8.4"

eth_netmask="255.255.255.0"

eth_broadcast="192.168.8.255"

 

for t in $tap; do

    openvpn --mktun --dev $t

done

 

brctl addbr $br

brctl addif $br $eth

 

for t in $tap; do

    brctl addif $br $t

done

 

for t in $tap; do

    ifconfig $t 0.0.0.0 promisc up

done

 

ifconfig $eth 0.0.0.0 promisc up

 

ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast


sample-scripts/bridge-stop

#!/bin/bash

 

####################################

# Tear Down Ethernet bridge on Linux

####################################

 

# Define Bridge Interface

br="br0"

 

# Define list of TAP interfaces to be bridged together

tap="tap0"

 

ifconfig $br down

brctl delbr $br

 

for t in $tap; do

    openvpn --rmtun --dev $t

done


Copyright © 2002-2005 by OpenVPN Solutions LLC <info@openvpn.net>. OpenVPN is a trademark of OpenVPN Solutions LLC.

编辑 webmaster

 
 
 
评论
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •  
    中国源码网 - www.YuanMa.org - 中国 开放源代码+编程 社区