Ubuntu共享WiFi(AP)给Android/更新方法二

/ #电脑相关 / 20 comments

Android是不支持Ad-hoc模式的WiFi.Windows 7软AP一个还是比较简单的.本文介绍在Ubuntu下实现软AP.(需要你的无线网卡支持AP哈)

使用工具hostapd,dnsmasq.我的环境时Ubuntu10.10;手机Android 2.1;网卡ath5k.有线网络使用静态的IP.

首先,系统是U10.10,安装软件

sudo apt-get install hostapd dnsmasq

为无线添加路由规则

sudo iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -s 10.1.1.0/24 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -d 10.1.1.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -i eth0 -j ACCEPT

10.1.1.0/24是我设置的地址段,可以自己改。

若要记录下路由的情况可以加如下语句:

sudo iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

其中NEW_HTTP_CONN是日记中的标识。

然后把现在iptables的规则写进/etc/iptables.rules

sudo sh -c "iptables-save > /etc/iptables.rules"

配置interface文件,使每次eth0启动时自动写规则

auto eth0
pre-up iptables-restore > /etc/iptables.rules post-down iptables-save > /etc/iptables.rulse

配置hostapd.conf

interface=wlan0
bridge=br0 #方法二中有用到
driver=nl80211
ssid=wbyxu
hw_mode=g
channel=11
dtim_period=1
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ieee80211n=0
wpa=3
wpa_passphrase=* #设置密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

详细hostapd.conf配置请看http://linuxwireless.org/en/users/Documentation/hostapd.

配置/etc/dnsmasq.conf

interface=wlan0
bind-interfaces #这个是只监听wlan0,没有之会检测所有卡
except-interface=lo
dhcp-range=10.1.1.10,10.1.1.110,6h #设置dhcp地址范
#address=/#/10.1.1.1 #这个会把#(代表所有网址)的dns到10.1.1.1这个地址

dnsmasq与named

一般情况下bind的named会占了53端口,然后dnsmasq会启动不了,所以我用killall named来杀了named再启动dnsmasq。

启动脚本

#! /bin/sh
case "$1" in
    start)
        killall named
        killall hostapd
        ifconfig wlan0 10.1.1.1
        hostapd -B hostapd.conf
        /etc/init.d/dnsmasq restart
        ;;
esac

"-B"后台运行,之后的hostapd.conf需要指名路径.

电脑上完成.

手机上设置WiFi不使用静态IP就可以了.

参考:使用hostapd和dnsmasq实现软AP

以上方法一:使用的是hostapd和dnsmasq实现
更新方法二:使用hostapd和bridge-utils

安装hostapd和bridge-utils

sudo apt-get install hostapd bridge-utils>

这个hostapd的配置和方法一相同。注意里面hostapd.conf里面的第二行就是制订的桥接。

然后就进行桥接

sudo brctl addbr br0 #这个就是hostapd.conf第二行使用的
sudo ifconfig eth0 0.0.0.0 up
sudo ifconfig wlan0 0.0.0.0 up
sudo brctl addif br0 eth0
sudo brctl addif br0 wlan0
sudo ifconfig br0 10.1.21.8 netmask 255.255.255.0 #10.1.21.8是eth0的IP
sudo route add default gw 10.1.21.1 

电脑上搞定。手机上设置(例)
静态IP:10.1.21.9
网关:10.1.21.1
掩码:255.255.255.0
DNS:8.8.8.8

呵呵,这个方法比较简单。

回应
  1. kenny

    博主你好,我按照你的方法试了几次都没成功。可以留下邮箱企鹅或者其他联系方式赐教下吗?

    Reply
  2. zalara

    dnsmasq: unknown interface wlan0

    请问这个是什么原因?

    Reply
    1. @zalara

      确认一下你的网卡是否支持软AP。

      Reply
      1. zalara
        @weibin

        你好,是支持的,型号是RTL8723AE,

        Reply
  3. [...] 经过昨天的实践,终于搞定Ubuntu共享WiFi功能,而且不是Ad-hoc模式。从此“二奶”可以作为无线中继使用(这里指的是在Ubuntu系统下)。参考教程: Ubuntu共享WiFi(AP)给Android/更新方法二 http://weibin.me/538 [...]

    Reply
  4. 感谢lz..按照lz的iptables 规则设置正确了..

    Reply
  5. jack

    问一下,“sudo ifconfig eth0 0.0.0.0 up”是干什么的?而且弄完之后我的电脑也上不了网了,只能重启。。。然后就是最后语句网关的操作也不太明白。。。

    Reply
    1. @jack

      “sudo ifconfig eth0 0.0.0.0 up”是将将网络接口的IP归0。“Linux下的网桥需要操作网络接口,但是接口上不能运行TCP/IP协议”。你直接用ifconfig重启一下eth0应该就行。

      Reply
      1. jack
        @WeiBin

        我看别处资料说,用这种方法的话本机就不能上网了。是这样的吗?看来这也不是一个最终的解决办法哈。。。

        Reply
        1. @jack

          本机是可以上网的哈。简单点的可以买个路由什么的,或者直接用支持Ad-hoc的rom。:)

          Reply
  6. jack

    楼主啊,我用第一方法,ANDROID手机能收到且分配到IP,连接上无线,不过上不了网。
    我用第二种方法,在桥接无限网卡wlan0时出现了“操作不支持”,无法继续。我看过我的网卡,支持master的。楼主知道何解?谢谢。

    Reply
    1. @jack

      首先,抱歉我现在已经没有在文中的环境了,所以无法测试。第一种方法可以获取ip的话,你可以看看iptable有没有写好。至于第二种情况,我还没有遇到过。还有,开始的时候可以先尝试不加密。

      Reply
      1. asf
        @weibin

        谢谢了,最后去买了个路由,一切都搞定了。

        Reply
        1. @asf

          :)

          Reply
      2. 123
        @weibin

        谢谢了,最后买了个路由!

        Reply
  7. 方法一,手机能连上,能dhcp到ip,却不能上网是怎么会是?
    手动设置IP也不行。

    Reply
    1. @xiaoba

      先尝试不加密,行不行呢?

      Reply
      1. @WeiBin

        不知道怎么弄的就好了。。。应该是我iptable没写好吧。。。

        Reply
        1. @xiaoba

          好吧,折腾好了就行。

          Reply
          1. @WeiBin

            嗯~多谢教程啊

            Reply