译者:温占考(Email: wzkwenzknet),来源:OpenVPN.net,转载请注明译者和出处及版权信息,并且不能用于商业用途,违者必究。
由于英语水平有限,如有错误,还望指正!
时间: 2006-06-19 22:00 于 沈阳
桥接概述
查看了解路由对比桥接的概述。
以太网桥接实质上是把一个以太网络接口和一个或多个虚拟TAP接口桥接在一个网桥接口上。以太网桥表现为使用软件模拟一个真实的以太网交换机。以太网桥可以理解为一种能够用来连接一个机器上的多个以太网接口(无论是物理的还是虚拟的)使它们共享一个IP子网的软件交换机。
把分布在两个独立网络的一个物理的以太网NIC和一个OpenVPN所使用的TAP接口桥接起来,这样就可以逻辑上合并两个以太网络,就像它们在一个以太网子网内。
配置桥接
这个例子将指导你配置一个OpenVPN服务器端的桥接。多个客户将会连接到这个网桥上,并且每个客户机的TAP接口将会分配到一个服务器端LAN网段的IP地址。
下面是两个实现客户IP地址分配的方法:
- 让OpenVPN使用server-bridge指示来管理其客户的IP地址池,或者
- 在LAN内配置DHCP服务器让其为VPN客户分配IP地址。
在这个例子中,我们将使用第一个方法即OpenVPN服务器管理其客户在LAN子网内的IP地址池,和DHCP服务器使用的地址池分开(如果存在的话)。两种方法在都有详细描述。
在我们的例子中,我们将使用下面的网桥配置:
设置 |
参数 |
取值 |
以太网络接口 |
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 |
第一步是按照中的“开始使用VPN并且测试其连通性(Starting up the VPN and testing for initial connectivity)”章节。然后,根据你是在Linux或Windows下配置桥接继续配置。
在Linux上配置桥接服务器
首先,确认你已经安装了bridge-utils软件包。
编辑下面的(启动网桥)脚本。根据你要桥接的物理网络接口设置br, tap, eth, eth_ip, eth_netmask, 和 eth_broadcast 参数。确认使用一个内部网络接口并且是连接在一个受防火墙保护的LAN内。你可以使用Linux的ifconfig命令获得网络接口的一些必要的信息来完成bridge-start(启动网桥)参数。
现在就运行bridge-start脚本。脚本将会创建一个永久[译者注:永久意为系统重新启动前永久,默认虚拟接口在OpenVPN退出后就消失]的tap0网络接口并且已经和以太网接口桥接成功了。
下一步,我们将要编辑(OpenVPN服务器端配置文件)来使能桥接配置。
注释掉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
到目前为止,桥接的配置就完成了,你可以(根据HOWTO继续完成剩下部分)。
在Windows XP中配置桥接服务器
这个配置在桥接端需要Windows XP或更高版本系统。据我所知,Windows 2000不支持桥接,然而Windows 2000系统可以是一个桥接网络的客户,而OpenVPN另一端的桥接是在Linux或Windows XP系统上实现的。
在Windows上安装OpenVPN时,安装程序将自动创建一个名为“本地连接2”的TAP-Win32适配器。转到控制面版中的网络连接下并且改名为“tap-bridge”。
接下来使用鼠标选择tap-bridge和以太网适配器,点击鼠标右键,并且选择桥接(Bridge Connections)。这样就在控制面板中创建了一个新的桥适配器图标。
在桥适配器的TCP/IP属性里配置IP地址192.168.8.4子网掩码255.255.255.0。
接下来,编辑(OpenVPN服务端配置文件) 使能桥接配置。
注释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适配器上的包过滤功能。
到目前为止,桥接的配置就完成了,你可以(根据HOWTO继续完成剩下部分)。
配置桥接客户端
在(OpenVPN客户配置)基础上进行配置。注释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 by Adam Pavelec.
页面有更多关于以太网桥接的说明。
说明 – 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 <>. OpenVPN is a trademark of OpenVPN Solutions LLC.