[ubuntu 12.04]开softAP供手机wifi上网,ubuntu自己就不能上网,怎么二者兼得?

包含网卡/无线网的网络问题和ADSL/校园网/宽带拨号支持及代理/共享等网络使用问题
回复
alexshots
帖子: 248
注册时间: 2010-01-22 23:45

[ubuntu 12.04]开softAP供手机wifi上网,ubuntu自己就不能上网,怎么二者兼得?

#1

帖子 alexshots »

[ubuntu 12.04]开softAP供手机wifi上网,ubuntu自己就不能上网,怎么二者兼得?

说一下我怎么弄的.dhcp3-server加hostapd,
网上有教程,不过好多说的细节不怎么样.我说一下我的.我是ubuntu 12.04.5 LTS 32bit版

首先,我的笔记本电脑无线网卡是内置的,artheros的ar9285.带ap那种.用ctrl-alt-t呼出控制台,sudo lspci,能看到.ubuntu已经自带驱动了.

安装 iw 命令:sudo apt-get install iw,我的ubuntu 12.04 自己已经有了.

命令iw list 查看是否支持 AP,是可以看到AP模式的支持字样的.

新立得软件包管理器,卸载dnsmasq,好像有个dnsmasq-base,和dnsmasq-utils那2个不用管.之前是过用dnsmasq搭配hostapd,不成功.

安装 hostapd 命令:sudo apt-get install hostapd .
root模式编辑/etc/hostapd.conf
比如sudo gedit /etc/hostapd.conf, 或者sudo nautilus,管理员级文件夹管理器,直接过去找.这个文件不存在,需要自己手动建.

hostapd.conf里头写,注意这个文件不能有注释语句...井号开头那种,自己用时候要删除.

interface=wlan0 #这个是因为我ubuntu无线网卡ifconfig中就是wlan0
driver=nl80211
ssid=abcde12345 #无线登陆帐号和显示名
hw_mode=g #我的无线网卡是802.11 a/b/g模式,这里默认选择g模式.这好像就这么要求的.包括就算实际启用b模式,这个也要写g...不知道怎么搞的.
channel=11
dtim_period=1
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0 #/etc/下有allow和deny两个表单,0表示deny表单中没写的,就都放行,1表示allow表单中写有的,才放行.实际要手动写参数行,和自己编写2个列表的,accept_mac_file=/etc/hostapd.accept和deny_mac_file=/etc/hostapd.deny我这根本就是偷懒
auth_algs=3 #这是个bit位值,1表示osa,2表示ska,3表示两者都支持
ieee80211n=0 #我那个无线网卡不支持802.11n,所以这里写0
wpa=3 # 这是个bit位值,1表示wpa,2表示wpa2,3表示使用wpa/wpa2双兼容型
wpa_passphrase=fghij67890 #wifi热点登陆密码
wpa_key_mgmt=WPA-PSK #表示使用psk模式
wpa_pairwise=TKIP CCMP #以下两行表示同时兼容wpa2和wpa配对登陆
rsn_pairwise=TKIP CCMP

-=--==--==

安装dhcp3-server 命令:sudo apt-get install dhcp3-server

配置之,sudo gedit /etc/dhcp/dhcpd.conf 需要root级权限编辑,

我用的dhcpd.conf模板:

ddns-update-style none;

option domain-name "example.org";

option domain-name-servers 114.114.114.114, ns2.example.org;

default-lease-time 600;

max-lease-time 7200;

log-facility local7;

subnet 192.168.6.0 netmask 255.255.255.0 {

range 192.168.6.10 192.168.6.245;

option domain-name-servers 114.114.114.114;

option domain-name "SoftAP";

option routers 192.168.6.1;

option broadcast-address 192.168.6.255;

default-lease-time 600;

max-lease-time 7200;

}
=--=-=模版结束-===--=-=

设置IP转发(连接外网)

命令: Echo "1" >/proc/sys/net/ipv4/ip_forward

可以这样 /etc/sysctl.conf文件.也是root权限级编辑.
其中有1行参数,默认是注释掉的,把那行开头的井号#删除,开启ip转发.
net.ipv4.ip_forward=1

然后 /proc/sys/net/ipv4/ip_forward 文件,也是要root级权限编辑.
默认是0,改成1.但是这个文件渺似不能用文本编辑器改,用控制台命令
sudo su 切入su模式, 然后
echo 1 >/proc/sys/net/ipv4/ip_forward 来做
如果用sudo,提示权限不够

=-=-=---=-=-
最后用一个脚本来启动,保存成myap.sh类似这样,其中192.168.6.x因为我dhcp就那么配置的ip池,所以,这里也是192.168.6.x,我的eth0网卡静态配的192.168.1.x,这里用192.168.6.x以示区别.ppp0是因为我adsl上网的,所以肯定网络流量上internet出口不是eth0...wlan0就是我的atheros的ubuntu无线网卡.

代码: 全选

#!/bin/sh

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o ppp0 -j MASQUERADE

iptables -A FORWARD -s 192.168.6.0/24 -o ppp0 -j ACCEPT

iptables -A FORWARD -d 192.168.6.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -i ppp0 -j ACCEPT

ifconfig wlan0 192.168.6.1 netmask 255.255.255.0 

dhcpd wlan0 -pf /var/run/dhcp-server/dhcpd.pid 

hostapd -B /etc/hostapd.conf

echo "nameserver 114.114.114.114" >> /etc/resolv.conf
脚本结束.可以每次需要时候,先联网,因为我是图形界面的network manager的managed模式,用network manager先起adsl.
之后sudo sh myap.sh
启动脚本.就能手机上网了.ssid的密码就按照上头配置的.就行.
相当于让ubuntu当了softAP软路由wifi热点.

=--=-=-==--=

但是这方法有一个问题,开softAP模式以后ubuntu本身就不能上网了.

我看网上说有一种解决方法,就是说,弄一条全0.0.0.0路由,给ubuntu指一个流量出口,但是配置写在哪儿,在哪儿设置?语法是什么....不懂啊.

所以,求助!!!!
上次由 alexshots 在 2015-01-04 22:33,总共编辑 2 次。
-
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: [ubuntu 12.04]开softAP供手机wifi上网,ubuntu自己就不能上网,怎么二者兼得?

#2

帖子 poloshiao »

[ubuntu 12.04]开softAP供手机wifi上网,ubuntu自己就不能上网,怎么二者兼得?
http://askubuntu.com/a/474305/198920
試試
同一張網卡 設定兩個網卡界面
一個網卡界面供开softAP供手机wifi上网
另一個網卡供 Ubuntu 本機上網
alexshots
帖子: 248
注册时间: 2010-01-22 23:45

Re: [ubuntu 12.04]开softAP供手机wifi上网,ubuntu自己就不能上网,怎么二者兼得?

#3

帖子 alexshots »

poloshiao 写了:[ubuntu 12.04]开softAP供手机wifi上网,ubuntu自己就不能上网,怎么二者兼得?
http://askubuntu.com/a/474305/198920
試試
同一張網卡 設定兩個網卡界面
一個網卡界面供开softAP供手机wifi上网
另一個網卡供 Ubuntu 本機上網
修复了修复了.找到为什么了.不是路由表的问题.开脚本以后,我route -v 看了一眼,路由表没问题.

关键是iptables看来设置的不对.楼主的那个脚本,看了一眼iptables的man手册,脚本中

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X
这4句的含义是删除所有iptables现有chain和规则.把脚本中的这4句删掉就行了.

因为-F和-X的含义是删除iptables规则,这一下本机的iptables转发规则都没有了.然后三句规则添加,实际就是把ubuntu变成一个纯粹的路由器.问题我这不是ubuntu server,我干吗要flush掉所有其他chain 规则...没必要.

就直接添加新的nat模式转发规则3条就好了.老的规则不用删除.

但是有个问题,老规则如果不删除的话,ubuntu本身能上网,手机也能通过softAP上网,但是,这句规则
iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o ppp0 -j MASQUERADE
在sudo iptables -S的显示结果中,就看不到了.....但是渺似是你配了还是生效的.这是为什么?!

奇葩啊!反正能使了.而且这还有一个问题,这样开启了softAP热点以后,怎么关闭啊...应该有一个关闭iptables相关规则并生效.或者关闭hostapd的命令...

这样才比较合乎逻辑....我再查查...

渺似是好坑跌啊.

sudo ps aux显示hostapd的进程号是2737,完了我sudo kill -9 2737之后.已经连接到ubuntu wifi softAP的手机,只要wifi不断线,照旧能上网.
但是已经断线wifi的手机,就无法再连了.

然后,sudo iptables -t nat -F

和sudo iptables -t nat -X两句执行完了,以后,已有的已经连入的手机,虽然wifi不会和ubuntu softAP断开.但是也没法上网了.哎呀...真可怕...

我自己还有一个usb的tp-link 802.11n的无线网卡,型号TL-WN823N rev1.0,芯片是rtl8192cu,ubuntu 12.04有这个驱动模块,不过好像不好使.所以用这种方法老是手机一连上就断线,被踢下来.懒得折腾原厂驱动了...看网上说,8192cu芯片驱动已经有v3.4.3,v3.4.4,4.0.x多个版本了.是挺流行的一个便携usb无线网卡芯片.
-
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: [ubuntu 12.04]开softAP供手机wifi上网,ubuntu自己就不能上网,怎么二者兼得?

#5

帖子 poloshiao »

但是有个问题,老规则如果不删除的话,ubuntu本身能上网,手机也能通过softAP上网,但是,这句规则
iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o ppp0 -j MASQUERADE
在sudo iptables -S的显示结果中,就看不到了.....但是渺似是你配了还是生效的.这是为什么?!
把 /etc/NetworkManager/NetworkManager.conf
dns=dnsmasq
改為
# dns=dnsmasq
然後
sudo restart network-manager
看看

參閱
http://www.ubuntugeek.com/how-to-disabl ... ecise.html
https://help.ubuntu.com/community/Dnsma ... or_dnsmasq
wzhy90
帖子: 91
注册时间: 2012-08-14 21:25

Re: [ubuntu 12.04]开softAP供手机wifi上网,ubuntu自己就不能上网,怎么二者兼得?

#6

帖子 wzhy90 »

最主要是你的wlan0网卡还是受到network-manager托管的,如果是现在安装的版本的hostap的话被network-manager托管的网卡根本开不了ap
所以你可以先试试在network-manager里面把wlan0禁用掉。编辑/etc/networkmanager/NetworkManager.conf
plugins=这行如果没有keyfile就加上这个词
然后在下面写这段
[keyfile]#(如果这行已经有了就在这行的下面加)
unmanaged-devices=mac:<hwaddr>;

hwadd是网卡mac地址
编辑完运行service network-manager restart重启network-manager
回复