Pages

Friday, 30 August 2013

如何在Linux下设置无线网络桥接

很多同学在说Linux下配置网络桥接不如Windows方便,如果要共享网络链接很麻烦。其实如果各位能到墙外查查看,很多博客都介绍了如何在Linux下做网络桥接的姿势和动作要领。这里为大家介绍一下。如果你遇到如下问题,这篇文章可以帮助你搞定。
* 对如何在Linux下进行桥接完全没有概念
* 在执行桥接命令时出现cant add wlan0 to bridge br0: Operation not supported。这是由于您的无线网卡没有处于AP模式。处于Managed模式的无线网卡无法进行桥接(不要挣扎了,Managed模式下的网卡没有足够多的信息做桥接,这是802.11规定的)。只要按如下所述使用hostapd即可解决问题
* 在执行iwconfig wlan0 mode Master时出现错误
Error for wireless request "Set Mode" (8B06) :
    SET failed on device wlan0 ; Invalid argument.
这说明您的网卡不支持硬件Master模式,您同样可以使用hostapd实现软Master模式解决问题。
* 正确设置之后主机无法访问互联网。您可能需要刷新系统原有的路由表,并在br0上,而不是eth0上启动dhcpcd(dhclient)

内核和内核支持

使用bridge功能需要内核支持,大多数预编译内核(如Fedora, Ubuntu等发行版默认安装的内核)都内建了bridge支持。在自编译内核中,你需要启用Networking support --> Networking options --> 802.1d Ethernet Bridging。如果编译为模块,可以通过modprobe bridge将其加载。内核编译的知识和姿势请自行Google。

设置hostapd

我知道有大神可以打开原生的AP(Master)模式。但是不管您是否能通过iwconfig打开AP模式,我都建议使用hostapd设置。安装hostapd的方法请自行Google。大多数发行版可以使用软件包管理器安装。
要设置一个简单的AP需要配置设置文件,以及启动hostapd程序。大多数操作都需要在root用户下操作。
在你认为合适的地方建立内容如下所述,文件名不那么重要的文件_
interface=wlan0
driver=nl80211
ssid=MyAP
channel=1
这个文件使端口wlan0工作在1信道下,建立一个ssid为MyAP的热点。默认不启用加密。若需设置加密,或需要更多信息,请参考这里
使用命令sudo hostapd /path/to/config/file启动hostapd,注意需要提供绝对路径。

建立设置网络桥接

网络桥接的配置需要使用brctl命令,在Gentoo下通过`sudo emerge -av bridge-utils安装。下面这段命令用于建立一个名叫br0的网桥。并把 wlan0 和 eth0 加入网桥
ifconfig eth0 up
ifconfig wlan0 up
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 wlan0
ifconfig br0 up
如果没有返回错误,桥接就已经成功了。

新的路由项

需要注意的是,在完成桥接设置后,你需要重新设置路由表,使得default指向br0而不是eth0。要做到这一点,最方便的做法(如果你在一个使用dhcp的网络环境下)是使用dhcpcd -k eth0 && dhcpcd br0来重新设置路由。如果没有DHCP,那您需要手动删除eth0上绑定的IP地址,并在br0上进行设置,最后更改相应的路由表项。我假设如果您会手动配置网络,一定知道我在说什么_*。如果您想更方便的设置,wicd中可以在preference中将wired interface改为br0,然后使用wicd进行配置。如果您这么做,在网桥消失之后(比如重启计算机之后)您需要将刚才的设置改回eth0.