- 為什么要做無線中繼?因?yàn)閮蓚€(gè)場景:第一個(gè)是在我司,WIFI上網(wǎng)同一賬戶只能連接兩個(gè)設(shè)備,現(xiàn)在兩個(gè)設(shè)備哪里夠?第二個(gè)場景是在賓館,我希望就像在家里一樣,所有設(shè)備都是連上路由器就可以免設(shè)置科學(xué)上網(wǎng),這就需要對賓館原來的WIFI進(jìn)行處理
- 為什么要隨時(shí)科學(xué)上網(wǎng)?我只能說,為了知識(shí)和真相
樹莓派使用的系統(tǒng):RASPBIAN JESSIE
另外,因?yàn)槭诸^沒有路由器,因此,本文介紹利用電腦直連樹莓派進(jìn)行相關(guān)設(shè)置。不多說,開始了。
1.設(shè)置IP
按照樹莓派官方的做法,樹莓派需要一根網(wǎng)線直連路由器,通過路由器的DHCP分配到IP后,就可以遠(yuǎn)程登錄了。但是剛才已經(jīng)提到,因?yàn)槭诸^沒有路由器,所以我們需要用電腦直連樹莓派進(jìn)行遠(yuǎn)程登錄。將制作好的樹莓派SD卡插入電腦,會(huì)彈出一個(gè)名為Boot的磁盤,其中有一個(gè)cmdline.txt文件,打開之后,在最后的位置追加一個(gè)IP如下:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait ip=192.168.3.1
插回SD卡至樹莓派,通電后,將我們的電腦端IP設(shè)置為192.168.3.100,掩碼設(shè)置為255.255.255.0即可連接樹莓派了
2.更改磁盤大小和LOCALE
樹莓派默認(rèn)并沒有用足所有的SD卡,具體原因未知。但是也很好調(diào)整。運(yùn)行sudo raspi-config,可以打開樹莓派設(shè)置窗口:第一項(xiàng),就是將文件系統(tǒng)擴(kuò)展到整個(gè)SD卡。順便把第五項(xiàng)中的語言項(xiàng)也改了吧,否則在安裝軟件時(shí),總會(huì)提示language沒有設(shè)置,我一般會(huì)選擇生成en_US.UTF-8以及zh_CN.UTF-8,默認(rèn)語言使用趙家語言(選擇時(shí),使用空格鍵來切換選中/未選)。
3.更改WIFI國別
為什么要更改WIFI國別?因?yàn)榘凑找?guī)范,各國的頻譜不一樣,詳見這里,如果不更改,樹莓派默認(rèn)使用大英帝國,直接的影響就是,可能某些5G信道會(huì)搜索不到。
編輯/etc/wpa_supplicant/wpa_supplicant.conf,更改country為CN
4.安裝第一塊WIFI適配器
因?yàn)槲宜舅诘腤IFI環(huán)境支持5G信號(hào),因此,在選擇WIFI適配器時(shí),我選擇了TP-LINK TL-WDN3321,該設(shè)備插入即可使用,免驅(qū)動(dòng)。
5.配置基于WPA-EAP的WIFI認(rèn)證
我司使用了基于PEAP和MSCHAPV2的WPA-EAP的WIFI認(rèn)證,但是沒有使用證書。
配置時(shí),只需要在/etc/wpa_supplicant/wpa_supplicant.conf增加如下段落即可
network={ ssid="ssid" key_mgmt=WPA-EAP eap=PEAP identity="id" password="password" #ca_cert="/etc/cert/ca.pem" #phase1="peaplabel=1" phase2="auth=MSCHAPV2" priority=10}
更改其中的ssid?identity和password為你所在環(huán)境的配置。
配置文件中可以有多個(gè)network配置,系統(tǒng)會(huì)根據(jù)搜索到的ssid來自動(dòng)匹配
6.連接WIFI
連接WIFI其實(shí)就是一個(gè)重新加載配置的過程,先執(zhí)行sudo ifdown wlan0,再執(zhí)行sudo ifup wlan0即可。之后,可以利用iwconfig命令查看wifi配置是否已經(jīng)加載,用ifconfig來查看是否分配到IP,如果一切順利,就應(yīng)該能夠上網(wǎng)了。
7.更改為中科大的源
樹莓派的apt-get的源在英國,因此訪問起來比較緩慢。感謝中國科學(xué)技術(shù)大學(xué) Linux 用戶協(xié)會(huì)做了鏡像,編輯/etc/apt/source.list,刪除其中的內(nèi)容,使用一下內(nèi)容代替
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ jessie main non-free contrib
之后運(yùn)行sudo apt-get update來更新源
8.固定接口名稱
什么叫固定接口名稱?當(dāng)我們插入WIFI適配器時(shí),尤其是我們的整個(gè)方案中,會(huì)使用兩個(gè)WIFI適配器時(shí),系統(tǒng)會(huì)隨機(jī)分配哪個(gè)是wlan0,哪個(gè)是wlan1。因?yàn)閮蓚€(gè)適配器不一樣,會(huì)導(dǎo)致運(yùn)行在上面的配置可能沒辦法生效。因此,我們必須讓系統(tǒng)記住WIFI適配器使用的接口名稱。
編輯新增文件/etc/udev/rules.d/10-network.rules,其中的內(nèi)容如下:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="wlan0"
注意其中的mac地址,設(shè)置為你的設(shè)備的mac地址。獲得mac地址,可以使用命令ip link
重啟系統(tǒng)后,再插入設(shè)備,就會(huì)綁定接口名稱
9.更改eth0的IP
前面的第一步中,我們使用了一個(gè)變相的手法分配了樹莓派的IP。但是我發(fā)現(xiàn)在該模式一下有一個(gè)問題:如果不插網(wǎng)線,樹莓派啟動(dòng)時(shí)會(huì)很長一段時(shí)間都在等待插入網(wǎng)線。
既然已經(jīng)進(jìn)入了系統(tǒng),我們自然還原為標(biāo)準(zhǔn)的配置。編輯文件/etc/network/interfaces,將eth0的配置改為如下
auto eth0 iface eth0 inet static address 192.168.3.1 netmask 255.255.255.0
然后編輯/boot/cmdline.txt,去掉第一步中增加的IP配置
10.安裝dnsmasq來設(shè)置DHCP服務(wù)
先來說明一下我的網(wǎng)段設(shè)置,有線網(wǎng)絡(luò)使用192.168.3這個(gè)網(wǎng)段,而無線AP端,使用192.168.4這個(gè)網(wǎng)段。
很多博文使用udhcpd來做作DHCP服務(wù)器,但是考慮到將來要科學(xué)上網(wǎng),既然dnsmasq就可以做這個(gè)事,那就只用它好了。
使用命令sudo apt-get install dnsmasq,編輯/etc/dnsmasq.conf,注意更改如下幾段:
#配置監(jiān)聽地址listen-address=127.0.0.1,192.168.3.1,192.168.4.1 #配置DHCP分配段dhcp-range=192.168.3.50,192.168.3.150,12h dhcp-range=192.168.4.50,192.168.4.150,12h
運(yùn)行命令sudo service dnsmasq restart來啟用
11.開啟包轉(zhuǎn)發(fā)
Linux系統(tǒng)默認(rèn)關(guān)閉了IP包轉(zhuǎn)發(fā),因此不能做路由器。所以需要先打開包轉(zhuǎn)發(fā)
編輯/etc/sysctl.conf,去掉以下屬性前的注釋:
# Uncomment the next line to enable packet forwarding for IPv4net.ipv4.ip_forward=1
運(yùn)行sudo sysctl -p來啟用
之后運(yùn)行
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
來啟用wlan0端口的NAT
12.安裝iptables-persistent
上一步中,我們啟用了一條防火墻規(guī)則,但是防火墻規(guī)則重啟后就丟失了,為了能夠規(guī)則開機(jī)自動(dòng)加載,我們可以使用iptables-persistent。用命令sudo apt-get install iptables-persistent來安裝該組件,根據(jù)其提示進(jìn)行初次設(shè)置(一路確認(rèn))。該組件默認(rèn)會(huì)將防火墻規(guī)則保存到/etc/iptables/rules.v4中。你可以使用如下命令保存和讀入規(guī)則:
#保存現(xiàn)有規(guī)則sudo service netfilter-persistent save #讀取并應(yīng)用先有規(guī)則sudo service netfilter-persistent reload
為什么服務(wù)名稱變成了netfilter-persistent,這里面好像有故事,留待以后再digg
13.安裝第二塊WIFI適配器
第一塊WIFI適配器是為了連接現(xiàn)有網(wǎng)絡(luò),第二塊則是為了建立WIFI熱點(diǎn)。為了建立WIFI熱點(diǎn),適配器必須具有AP的mode。可以使用命令iw list|grep -A10 'Supported interface modes'查看。比如,我選用的設(shè)備是widemac SL-1506N,其參數(shù)如下:
Supported interface modes: * IBSS * managed * AP * AP/VLAN * WDS * monitor * mesh point
該設(shè)備依然是插入即可,不需要驅(qū)動(dòng)。
14.設(shè)置第二塊Adapter的IP
依然是編輯/etc/network/interfaces,更改wlan1的配置如下
auto wlan1 iface wlan1 inet static address 192.168.4.1 netmask 255.255.255.0
15.固定第二塊WIFI適配器的接口名稱
做法類似于第一塊,只不過再加入一行而已,接口名稱為wlan1,這里就不說了,記得重啟讓其生效。
16.安裝并開啟hostapd
Linux啟用WIFI熱點(diǎn),使用的是hostapd。首先,用命令sudo apt-get install hostapd安裝它,然后增加配置文件/etc/hostapd/hostapd.conf如下:
interface=wlan1 driver=nl80211 ssid=ssid hw_mode=g channel=13 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=passwd wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
只需要更改其中的ssid和wpa_passphrase屬性。
之后運(yùn)行命令sudo hostpad -d /etc/hostapd/hostapd.conf來觀察測試,沒有錯(cuò)誤可以連接,就OK了。 CTRL+C后,編輯/etc/default/hostapd,改變DAEMON_CONF的配置如下
DAEMON_CONF="/etc/hostapd/hostapd.conf"
之后就可以使用sudo service hostapd start正式啟動(dòng)WIFI熱點(diǎn)了
至此,通常一個(gè)WIFI中繼路由器就好了,以下介紹透明科學(xué)上網(wǎng)部分
17.建立無污染DNS
以前都需要使用chinadns等項(xiàng)目,現(xiàn)在基本上都直接使用中科大的DNS,直接無污染。在/etc/dnsmasq.conf,加入如下規(guī)則
no-resolv?
server=202.38.93.153?
server=202.141.162.123
重啟dnsmasq,可以用dig t.co測試一下
18.安裝shadowsocks
這里首先要說明一下,我找了很久,也沒有找到適合樹莓派的shadowsocks-libev,因此,我們使用了redsocks+shadowsocks的組合來替代。
樹莓派源中的shadowsocks的版本很低,連rc4-md5都不支持。因此,我們使用pip安裝,鍵入sudo pip install shadowsocks即可安裝,之后新建配置文件/etc/shadowsocks.conf如下
{ "server":"xxx.xxx.xxx.xxx", "server_port":8964, "local_address":"0.0.0.0", "local_port":1080, "password":"password", "timeout":600, "method":"rc4-md5"}
然后用命令sudo sslocal -c /etc/shadowsocks.conf -d start來啟動(dòng)
沒有問題,就將sslocal -c /etc/shadowsocks.conf -d start加入/etc/rc.local來讓其開機(jī)啟動(dòng)
19.安裝redsocks
執(zhí)行sudo apt-get install redsocks來安裝軟件,之后編輯/etc/redsocks.conf,更改其中的redsocks部分如下
redsocks { local_ip = 0.0.0.0; local_port = 12345; ip = 127.0.0.1; port = 1080;}
使用命令sudo service redsocks start來啟動(dòng)軟件
可以使用netstat -an|grep 1080和netstat -an|grep 12345來確認(rèn)一下shadowsocks和redsocks都啟動(dòng)了
20.安裝ipset并導(dǎo)入chnroute
我們科學(xué)翻墻的規(guī)則:凡是國外的網(wǎng)站都用shadowsocks加速。因此,我們借助于ipset保存國內(nèi)ip段。先用sudo apt-get install ipset安裝軟件
執(zhí)行命令
curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.txt
來導(dǎo)出國內(nèi)ip段
然后用如下命令導(dǎo)入到ipset
sudo ipset create chnroute hash:net cat chnroute.txt | sudo xargs -I ip ipset add chnroute ip
21.備份ipset并開機(jī)載入
各位看官可能已經(jīng)發(fā)現(xiàn),導(dǎo)入ipset的過程非常緩慢,不適合每次開機(jī)都執(zhí)行。我們可以將ipset的結(jié)果保存,每次開機(jī)導(dǎo)入。執(zhí)行如下命令
sudo ipset save chnroute > /etc/chnroute.ipset
然后在/etc/rc.local中加入如下語句
ipset restore < /etc/chnroute.ipset
即可開機(jī)執(zhí)行
22.導(dǎo)入防火墻規(guī)則
sudo iptables -t nat -N SHADOWSOCKSsudo iptables -t nat -A SHADOWSOCKS -d $server_IP -j RETURNsudo iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN sudo iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN sudo iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN sudo iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN sudo iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN sudo iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN sudo iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN sudo iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN sudo iptables -t nat -A SHADOWSOCKS -m set --match-set chnroute dst -j RETURNsudo iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345sudo iptables -t nat -A OUTPUT -p tcp -j SHADOWSOCKS sudo iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
其中server_IP是你的VPS的地址
然后保存規(guī)則
sudo service netfilter-persistent save
23.開機(jī)重新生效防火墻規(guī)則
既然iptables-persistent可以開機(jī)加載防火墻規(guī)則,為什么還要談這個(gè)?因?yàn)榉阑饓σ?guī)則中,有使用到redsocks的端口12345,但是因?yàn)閱?dòng)順序問題,很可能redsocks還沒有啟動(dòng),防火墻規(guī)則先加載了,所以會(huì)導(dǎo)致防火墻規(guī)則加載失敗。因此,我們需要把規(guī)則加載放入/etc/rc.local中:
iptables-restore < /etc/iptables/rules.v4
評論
查看更多