小米隨身wifi到手,準備開搞當個ap給linux共享wifi上網!

思路:目前國內的隨身wifi基本上都是用的Ralink芯片的USB無線網卡而已,只不過不少無線網卡芯片不支持master模式,因此不能兼作ap,而Ralink出的幾款芯片都是支持master模式的,在Linux下就能夠經過hostapd這個軟件包+iptables(NAT)+dhcpd(給設備動態分配IP)設置使手機等設備共享電腦上的有線鏈接實現上網。php

 

經查,小米wifi用的應該是mediatek(也就是之前的Ralink)的7601芯片。ArchLinuxer最喜歡作的一件事,先在AUR裏搜搜看:linux

yaourt -Ss 7601

結果以下git

aur/dkms-mt7601u v3.0.0.4-1 (2)
    Driver for Ralink MT7601U chipset wireless adaptors
aur/dkms-mt7601u-latest v3.0.0.4-5 (4)
    Driver for Ralink MT7601U chipset wireless adaptors
aur/mt7601u-ap-dkms 3.0.0.3-1 [installed] (1)
    Kernel module for Ralink MT7601U chipset wireless adaptors with Access 
    Point (AP / Master) support.
aur/mt7601u-dkms 3.1-1 (1)
    Kernel module for MediaTek MT7601U USB dongles, written from scratch based 
    on the vendor GPL-driver. Unlike the vendor driver this driver uses modern 
    Linux WiFi infrastructure and should work flawlessly with NetworkManager, 
    wicd, wpa_supplicant and such.
aur/mt7601u-git 2015.04.30-1 (3)
    Driver for Mediatek MT7601U USB bgn WiFi dongle
aur/test_mt7601u 0.1-2 (0)
    Test if mt7601u (wifi) is loaded. If not, it install it

心中竊喜呀!竟然有'mt7601u-ap-dkms'這個現成的包,直接開裝!less

$ yaourt -S mt7601u-ap-dkms
#此處省略一萬字。。。
:: 進行安裝嗎? [Y/n] 
(1/1) 正在檢查密鑰環裏的密鑰                       [######################] 100%
(1/1) 正在檢查軟件包完整性                         [######################] 100%
(1/1) 正在加載軟件包文件                           [######################] 100%
(1/1) 正在檢查文件衝突                             [######################] 100%
(1/1) 正在檢查可用硬盤空間                         [######################] 100%
(1/1) 正在安裝 mt7601u-ap-dkms                     [######################] 100%

Creating symlink /var/lib/dkms/mt7601u-ap/3.0.0.3/source ->
                 /usr/src/mt7601u-ap-3.0.0.3

DKMS: add completed.
Error! echo
Your kernel headers for kernel 4.0.1-1-ARCH cannot be found at
/usr/lib/modules/4.0.1-1-ARCH/build or /usr/lib/modules/4.0.1-1-ARCH/source.
>>> You might need to modprobe mt7601Uap manually.
>>> Also, you *must* change the default values (especially WPAPSK)
>>> in /etc/Wireless/RT2870AP/RT2870AP.dat
>>> Read the documentation in /usr/src/mt7601u-ap-3.0.0.3/doc.

WTF! 個人機器上居然沒有linux header...(抱歉昨天剛裝的新電腦,系統也是新的)。 趕忙裝上!dom

$ yaourt -S linux-headers

以後就沒有問題了,yaourt -S mt7601u-ap-dkms順利安裝併成功自動編譯成功內核模塊,注意後面的提示:ui

>>> You might need to modprobe mt7601Uap manually.
>>> Also, you *must* change the default values (especially WPAPSK)
>>> in /etc/Wireless/RT2870AP/RT2870AP.dat
>>> Read the documentation in /usr/src/mt7601u-ap-3.0.0.3/doc.

嗯,按照給出的提示,先把新編譯好的內核模塊modprobe一下:this

# modprobe rtutil7601Uap
# modprobe mt7601Uap
# modprobe rtnet7601Uap

一樣按照給出的提示,編輯/etc/Wireless/RT2870AP/RT2870AP.dat,把裏面SSID(名稱)和WPAPSK(密碼)改爲你本身的內容:spa

...
SSID=RA_11_AP #AP對外顯示的名稱
...
WPAPSK=Chang_Me_Now #密碼
...

好!有了驅動,咱就能夠安裝須要的軟件了:.net

$ yaourt -S hostapd

以後要寫入這個文件,指定SSID名稱和密碼以及小米wifi的設備名(ra0):/etc/hostapd/hostapd.confcode

ssid=xiaomi_WIFI #設置AP接入點名稱
wpa_passphrase=Somepassphrase #設置你的WIFI密碼
interface=ra0 #小米隨身wifi插入電腦後默認的interface名稱就是ra0
bridge=br0
auth_algs=3
channel=7
driver=nl80211
hw_mode=g
logger_stdout=-1
logger_stdout_level=2
max_num_sta=5
rsn_pairwise=CCMP
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP

順便說一下,在mt7601u-ap-dkms這個包裏設置過一次SSID和密碼了,在hostapd裏也有一個設置SSID和密碼的地方。我不知道到底哪一個纔是真正管用的,因此兩個地方都設成同樣的了,省得麻煩。

爲了NAT,須要軟件包’iptables',多數發行版默認應該已經裝好了。爲了給聯網的設備分配動態IP,須要軟件包dhcp並作必定的配置:

yaourt -S iptables dhcp
sudo mv /etc/dhcpd.conf /etc/dhcpd.conf.example #主要是默認的配置文件比較煩,咱們先把它備份一下,再本身建立一個
sudo vi /etc/dhcpd.conf

在/etc/dhcpd.conf中輸入如下內容:

option domain-name-servers 114.114.114.114, 8.8.8.8;
option subnet-mask 255.255.255.0;
option routers 192.168.123.100;
subnet 192.168.123.0 netmask 255.255.255.0 {
  range 192.168.123.150 192.168.123.250;
}

默認狀況下,dhcpd會對電腦上全部網卡都起做用,而咱們但願它只做用於小米wifi,故能夠藉助systemctl讓它成爲只針對ra0這個interface的service。先要建立一個systemctl用的配置文件:

sudo vi /etc/systemd/system/dhcpd4@.service

輸入如下內容:

[Unit]
Description=IPv4 DHCP server on %I
Wants=network.target
After=network.target

[Service]
Type=forking
PIDFile=/run/dhcpd4.pid
ExecStart=/usr/bin/dhcpd -4 -q -pf /run/dhcpd4.pid %I
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target

準備好dhcpd後,就能夠編輯腳本了:

vi ~/bin/ap.sh

輸入如下內容:

#!/bin/sh

#modprobe kernel modules for xiaomi Wireless card
modprobe rtutil7601Uap
modprobe mt7601Uap
modprobe rtnet7601Uap

#Set Static IP address on interface ra0
ip link set up dev ra0
ip addr add 192.168.123.100/24 dev ra0

#enable packet forwarding
sysctl net.ipv4.ip_forward=1

#enable NAT
iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ra0 -o internet0 -j ACCEPT

#enable dhcpd
systemctl start dhcpd4@ra0

#enable hostapd
systemctl start hostapd

保存之後,設置其爲可執行文件,再sudo運行,大功告成!

chmod 755 ~/bin/ap.sh
sudo ~/bin/ap.sh

之後只要想用小米WIFI共享上網,只要sudo運行一遍這個腳本就行啦!

 

參考資料:

一、小米隨身WiFi,Linux下AP熱點驅動(開源)

  本文是受上面說的這篇文章的啓發,我本身對照Arch Wiki設置好的,這樣對整個設置的內部運行機制瞭解得深一些。那篇文章裏提供了Github的源碼,能夠下載下來後直接編譯運行,彷佛簡單些。但我只編譯了沒運行,不肯定能不能直接用。

二、Arch Wiki: Software access point

三、Arch Wiki: Internet sharing

四、Arch Wiki: dhcpd

相關文章
相關標籤/搜索