常见问题常见问题   搜索搜索   会员列表会员列表   团队团队   注册注册    个人资料个人资料   登录查看您的站内信件登录查看您的站内信件   登录登录 

用 NETGRAPH 构建 ether 网桥

 
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全
阅读上一个主题 :: 阅读下一个主题  
作者 留言
zhaork
半仙


注册时间: 2007-01-19
文章: 17

文章发表于: Wed 2007-01-24 09:31:19    发表主题: 用 NETGRAPH 构建 ether 网桥 引用并回复

在 FreeBSD 中除了用 bridge 和 if_bridge 构建网桥外,还可以用 NETGRAPH 的 ng_ether 和 ng_bridge 构建网桥。
用这个方法将几块网卡构建的网桥,在外部看上去就像一块网卡。
执行脚本:/bin/ebridge
--------------------------------------------------------
#!/bin/sh

B_NAME=bnet0 #网桥名称
B_IF0=fxp0 #第一块网卡
B_IF1=rl1 #第二块网卡

kldload ng_ether #加载模块
kldload ng_bridge #加载模块

ifconfig ${B_IF0} up #启动网卡
ifconfig ${B_IF1} up #启动网卡

ngctl mkpeer ${B_IF0}: bridge lower link0 #创建网桥节点并将第一块网卡挂在这个节点上,lower 表示转发进入的包
ngctl name ${B_IF0}:lower ${B_NAME} #命名网桥名称
ngctl connect ${B_IF1}: ${B_NAME}: lower link1 #将第二块网卡挂在这个节点上

ngctl connect ${B_IF0}: ${B_NAME}: upper link2 #将第一块网卡挂在这个节点上,upper 表示转发出去的包,如果是纯网桥不与主机联络这两行可不写
ngctl connect ${B_IF1}: ${B_NAME}: upper link3 #将第二块网卡挂在这个节点上

ngctl msg ${B_IF0}: setpromisc 1 #设置第一块网卡为混杂模式
ngctl msg ${B_IF0}: setautosrc 0 #设置第一块网卡采用单一的 Ethernet 源地址

ngctl msg ${B_IF1}: setpromisc 1 #设置第二块网卡为混杂模式
ngctl msg ${B_IF1}: setautosrc 0 #设置第二块网卡采用单一的 Ethernet 源地址

ifconfig ${B_IF0} 192.168.1.x #设置第一块网卡的IP地址,或者在 rc.conf 中设置,如果是纯网桥不与主机联络这行可不写
---------------------------------------------------------

如果开机就需要构建网桥以及一个网桥要跨接好几张网卡时可采用下列方法:
开机启动脚本:/etc/rc.d/ebridge
---------------------------------------------------
#!/bin/sh

# PROVIDE: ebridge
# BEFORE: NETWORKING
# KEYWORD: nojail

ebridge_enable=${ebridge_enable:-"NO"}
. /etc/rc.subr
name="ebridge"
rcvar=`set_rcvar`
start_cmd="${name}_start"
stop_cmd="${name}_stop"
B_NAME="bnet0"

ebridge_start()
{
for j in ng_ether ng_bridge; do
if kldstat -v | grep -qw $j; then
else
kldload $j
fi
done

for k in ${ebridge_interfaces}; do
ifconfig $k up
done

FIF=`echo ${ebridge_interfaces}|awk '{ print $1 }'`
ngctl mkpeer ${FIF}: bridge lower link0
ngctl name ${FIF}:lower ${B_NAME}

LKN=0
for SIF in ${ebridge_interfaces}; do
if [ ${LKN} != 0 ]; then
ngctl connect ${SIF}: ${B_NAME}: lower link${LKN}
fi
LKN=`expr ${LKN} + 1`
done

for AIF in ${ebridge_interfaces}; do
ngctl connect ${AIF}: ${B_NAME}: upper link${LKN}
LKN=`expr ${LKN} + 1`
done

for i in ${ebridge_interfaces}; do
ngctl msg $i: setpromisc 1
ngctl msg $i: setautosrc 0
done
}

ebridge_stop()
{
ngctl kill ${B_NAME}: > /dev/null 2>&1
for k in ${ebridge_interfaces}; do
ngctl kill $k: > /dev/null 2>&1
done
}

load_rc_config $name
run_rc_command "$1"

---------------------------------------------------
在 /etc/rc.conf 中设置:
-------------------------------
ebridge_enable="YES"
ebridge_interfaces="rl0 rl1 rl2 rl3" #需要加入网桥的网卡
ifconfig_rl0="inet 192.168.1.x mask 255.255.255.0" #给网桥一个IP地址
-------------------------------

在运行中可以用命令停止网桥:
# /etc/rc.d/ebridge stop

也可以启动网桥:
# /etc/rc.d/ebridge start

以可以停止再启动网桥:
# /etc/rc.d/ebridge restart

_________________
zhaork
返回页首
阅览会员资料 发送站内信件
colddawn
道童


注册时间: 2004-09-26
文章: 364

文章发表于: Wed 2007-01-24 17:30:32    发表主题: 引用并回复

netgraph到底是个什么东西?貌似是套网络流的底层架构?一直想看没来得及看来的。这个bridge性能如何?
返回页首
阅览会员资料 发送站内信件
zhaork
半仙


注册时间: 2007-01-19
文章: 17

文章发表于: Wed 2007-01-24 22:20:53    发表主题: 引用并回复

NETGRAPH是可以提供各种网络功能一个系统,它的网络功能可以在 /boot/kernel/ng_*.ko 的驱动模块中看出,*-就是它的功能。利用它构建的网桥性能没有测试过,但是用下来感觉不错。
_________________
zhaork
返回页首
阅览会员资料 发送站内信件
wangbin
老妖


注册时间: 2003-06-20
文章: 1461

文章发表于: Tue 2007-05-15 00:19:16    发表主题: 引用并回复

学习!!!收藏!!!
_________________
问:为什么不用ports?
答:装13。
我很欣赏。
返回页首
阅览会员资料 发送站内信件
从以前的文章开始显示:   
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全 论坛时间为 北京时间
1页/共1

 
转跳到:  
不能发布新主题
不能在这个论坛回复主题
不能在这个论坛编辑自己的文章
不能在这个论坛删除自己的文章
不能在这个论坛发表投票


Powered by phpBB 2023cc © 2003 Opensource Steps; © 2003-2009 The FreeBSD Simplified Chinese Project
Powered by phpBB © 2001, 2005 phpBB Group
Protected by Project Honey Pot and phpBB.cc
silvery-trainer
The FreeBSD China Project 网站: 中文计划网站 社区网站
The FreeBSD China Project 版权所有 (C) 1999 - 2003 网页设计版权 著作权和商标