树莓派无线路由 + 网易云音乐海外绕过
前言
这个教程是很久以前写的了,部分信息可能已经不再准确。
准备
- 树莓派 (型号 0/1/2/3 均可) - 1只
- USB 无线网卡 (树莓派 0、1、2 需要)
- 以太网 RJ45 转 USB (树莓派 0 需要)
- 全新安装 Raspbien (其它发行版或已经安装有系统的树莓派酌情参考教程)
- Micro-USB 转 USB (树莓派 0 需要)
- USB 1 接 X (树莓派 0 需要)
- microSD / SD 读卡器
- 键盘鼠标
将各个部件连接到树莓派(除内存卡之外,无线网卡、键鼠、有线网络等),暂时不要连接电源。
阅读须知
本文教程中若行开头为 #
符号表示该指令需要 root
权限执行,例如 # nano
在 pi
用户权限下需要使用 sudo nano
执行。
有时候需要长时间已 root
名义编辑配置文件,你可以现在通过 sudo passwd
修改 root
的密码,然后通过 su
登陆为 root
用户。
nano
为 linux 下的一个文本编辑器。编辑结束后,按下 Ctrl + X
→ Y
→ Enter
保存修改;或将
Y
换成 N
放弃修改并退出编辑。
初始化系统
首先用 rufus 或 Win32DiskImager 烧录 Raspbian Jessie With Pixel / Lite 镜像到内存卡,然后插入树莓派,启动。初次启动会提示内存卡分区调整完毕,五秒后自动重启。
重启后使用 pi
/ raspberry
登入,登入进去后先启用 SSH (systemctl enable ssh
),然后通过第三方软件如 Putty / SmarTTY 在电脑上连接 (方便复制粘贴)。
回到树莓派,此时你可以检查一下网络连接,curl goo.gl
是一个很简单的方法。
安装软件包
首先安装几个必须的软件包:
apt update
apt install hostapd iptables-persistent dnsmasq nginx
因为树莓派的性能不是特别好,因此可能会消耗几分钟,耐心等待即可。
安装 iptables-persistent
时会询问你是否保存现在的规则,全部选 YES
即可。
配置 DHCP 服务
按下 Ctrl + W
搜索 interface=
,去掉前方的 #
然后按照下图填写 (文字版在图片后面):
interface=wlan0
bind-interfaces
dhcp-range=192.168.1.10,192.168.1.200,255.255.255.0,72h
dhcp-option=option:router,192.168.1.1
dhcp-option=option:dns-server,192.168.1.1
注意:一般来说 192.168.1.*
是你主路由器占用的 IP 段。我这里的网络环境有点特殊,路由器分配的 IP 是 10.*.*.*
所以可以这么做。如果冲突了的话,把 IP 从 192.168.1.*
改成 192.168.42.*
这样或者别的数字都可以。
此段感谢 @冰喵 菊苣告知 dnsmasq 也可以当 DHCP 服务器使用。
设定静态 IP
因为树莓派作为路由器使用的话需要提供一个固定的 IP 地址,因此需要将 wlan0
的 IP 设定为之前指定的 IP。
首先停用无线网卡:
ifdown wlan0
然后修改网卡设定:
nano /etc/network/interfaces
找到 iface wlan0 inet manual
,删掉然后加上:
iface wlan0 inet static
address 192.168.1.1
netmask 255.255.255.0
配置无线热点
现在可以配置无线热点了。使用 nano
打开配置文件 /etc/hostapd/hostapd.conf
,贴入下述配置文件:
interface=wlan0
driver=nl80211
ssid=Pi_AP
country_code=US
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=Raspberry
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_group_rekey=86400
ieee80211n=1
wme_enabled=1
有几个重要的信息需要注意:
driver
我也不知道怎么去找这个,如果启动不了可以试试换成rtl871xdrv
或者删掉这一行。ssid
是你的热点名称。wpa_passphrase
是你的热点连接密码。
其他的配置信息也不是很懂,就留着这样吧..
现在可以来测试一下,看有没有问题:
hostapd /etc/hostapd/hostapd.conf
像我这里,因为直接从 Windows 下粘贴到文件然后改进去,结果因为换行标准不同导致读取失败。
如果你也遇到了这个问题,你可以通过 # apt install dos2unix
安装 dos2unix
这个小工具,然后运行 # dos2unix /etc/hostapd/hostapd.conf
修复这个问题。
另外要注意的是不能在等号前后、行结束的地方放空格,这个程序也会报错。
接下来就是告诉这个程序在默认配置里告知这个配置文件:
nano /etc/default/hostapd
寻找 #DAEMON_CONF=""
,改成 DAEMON_CONF="/etc/hostapd/hostapd.conf"
:
以及在引导脚本内告知:
nano /etc/init.d/hostapd
找到 DAEMON_CONF=
并换成 DAEMON_CONF=/etc/hostapd/hostapd.conf
:
启用网络转发
因为是作为无线热点使用,需要将无线流量转发到有线流量。树莓派默认是没有启用网络设备的流量转发功能。
nano /etc/sysctl.conf
找到 #net.ipv4.ip_forward=1
然后把前面的 #
给去掉保存即可。
然后就是利用 iptables
转发流量到有线网络:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
然后做下优化,根据 MTU 自动调整 MSS(可选,由@冰喵提供):
iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
规则加入后记得保存,下次重启自动应用规则:
iptables-save > /etc/iptables/rules.v4
屏蔽 IP
iptables 作为 Linux 下的一个“防火墙”,当然可以屏蔽指定的 IP。
iptables -I FORWARD -d 223.252.199.10 -j REJECT
上面这条指令就是告诉防火墙,拒绝转发流量至 223.252.199.10
这个地址。
规则加入后记得保存:
iptables-save > /etc/iptables/rules.v4
配置 DNS
打开配置文件:
nano /etc/dnsmasq.conf
按下 Ctrl + W
然后输入 no-hosts
回车:
把 no-hosts
前面的 #
去掉,然后后面的 #addn-hosts=
改成:
addn-hosts=/etc/hosts_extra
接着修改给 DNS 服务使用的 hosts 文件:
nano /etc/hosts_extra
放入服务器地址:
0.0.0.0 music.httpdns.c.163.com
192.168.1.1 music.163.com
192.168.1.1 ip.ws.126.net
125.39.1.27 m10.music.126.net
然后保存退出。
配置 nginx
参考之前的文章:手动搭建 → 加入配置文件
当然文章里的 proxy_set_header X-Real-IP 110.76.23.1;
这个地方,需要你另找一个国内的 IP 地址。
启动服务
update-rc.d hostapd enable
update-rc.d isc-dhcp-server enable
update-rc.d dnsmasq enable
update-rc.d nginx enable
然后就执行 reboot
重启树莓派,看手机能不能连上去了:
实际测试
结束
左边的 USB Hub 前面从上往下分别为:无线键鼠、无线网卡、U 盘;后面分别为网线转 USB、树莓派接入、外置电源(因为树莓派 0 的 USB 口供电不够大)。
参考
- adafruit.com: Setting up a Raspberry Pi as a WiFi access point