如何用树莓派自制路由器

Click here to view the English version of the tutorial

最近家里wifi连续使用时间一长就会出现速度大幅度波动,严重影响了我上王者的速度,估摸着应该是路由器扛不住夏天的高温,所以脑回路一转觉得可以用手头的树莓派替代路由器。反正树莓派3又有ethernet接口又有wifi模块,理论上实现应该很简单,然而一如往常我又给自己挖了个坑。8个小时后重新连接上文明社会互联网的我写下了这篇教程。

网上有多篇类似教程但是出于各种原因在我的树莓派3上都没有实验成功,这篇教程大多数内容借鉴自Medium上的Turn a RaspBerryPi 3 into a WiFi router-hotspot(需要科学上网)。

首先你需要一个树莓派。我用的是树莓派3代B型和最新的Raspbian系统。B+型跟B型区别不大应该没问题,zero W型应该也可以,我很想试验一下但是没钱买,老版的树莓派可能需要配上一个usb wifi模块。

家里的宽带是网线入户但是需要用运营商提供的账号密码来上网,也就是PPPoE,国内大多数家里用的应该是类似的网。我们需要一个叫pppoeconf的工具来让树莓派接上互联网,去这里下载安装包,国内的话点击“ftp.cn.debian.org/debian”下载会快一些。下载好以后sudo dpkg -i pppoeconf_1.21_all.deb来安装这个deb。接着把树莓派直接连接上网线,用sudo pppoeconf打开程序,跟着GUI一路设置就好了。这时候打开浏览器确认一下树莓派可以上网。

接着例行

sudo apt-get update
sudo apt-get dist-upgrade

安装两个程序

sudo apt-get install hostapd isc-dhcp-server

然后sudo nano /etc/dhcp/dhcpd.conf,把

option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

这两行前面加#号注释掉。把

#authoritative;

前面的#号去掉。接着到文件的最后加上

subnet 192.168.42.0 netmask 255.255.255.0 {
range 192.168.42.10 192.168.42.50;
option broadcast-address 192.168.42.255;
option routers 192.168.42.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
option domain-name-servers 114.114.114.114, 114.114.115.115; #可以换成其他的DNS服务器
}

ctrl+x退出,y接回车保存。

sudo nano /etc/default/isc-dhcp-server

把INTERFACES=””改成INTERFACES=”wlan0″来针对一下wlan0。保存退出。
编辑interfaces:

sudo ifdown wlan0
sudo nano /etc/network/interfaces

把这个

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0
post-up iw dev $IFACE set power_save off

加到最最后面。保存推出后强行改ip

sudo ifconfig wlan0 192.168.42.1

DHCP就差不多改完了。

开始设置wifi

sudo nano /etc/hostapd/hostapd.conf

填入以下内容

interface=wlan0
ssid=RaspiPoweredWifi #改成你想要的wifi名
hw_mode=g
channel=6 #频道随便选一个
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=12345678 #这里设置wifi密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

保存退出,wifi搞定。接下来把pppoe和wlan连接起来。

sudo nano /etc/sysctl.conf

跳到最后加上

net.ipv4.ip_forward=1

保存退出。刷一波iptables

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

这里有教程说应该刷ppp0,不过我亲测eth0有效,ppp0用不了。
加入启动项全家桶

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

切回interfaces

sudo nano /etc/network/interfaces

把这个加到最后面

up iptables-restore < /etc/iptables.ipv4.nat

保存退出。
打开两个服务

sudo service hostapd start
sudo service isc-dhcp-server start

重启。

以上。

Scan the QR Code

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.