把树莓派作为Wi-Fi路由器(IPv6 passthrough、5GHz 11ac)

Table of Contents

最近刚入手了Raspberry Pi 3B+. 打算当做一个高可玩性的路由器用。

毕竟这代硬件配备了千兆以太网(受限于USB总线带宽只能跑到250Mbps左右),和11ac Wi-Fi(受限于SDIO总线只能跑到110Mbps左右)。

参考资料:https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md

我准备实现以下几个功能:

  1. Wi-Fi工作在11ac模式(如果你想使用11n模式,建议在hostapd配置部分参考这里),达到433Mbps的Link Speed
  2. Wi-Fi共享以太网口的网络,IPv4使用NAT模式
  3. IPv6使用穿透模式(可适用于几乎所有学校和家庭的IPv6环境,甚至你的手机开启个人热点后通过USB连接在Pi上也可以用这种方式使后端设备得到IPv6地址)

接下来开始操作:

0x00. 切换到root用户

sudo su

0x01. 安装必要软件包

apt install hostapd dnsmasq bridge-utils ebtables

0x02. 在sysctl.conf中打开IPv4转发

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

0x03. 给wlan0配置一个静态IP

在做这步操作之前,请先确保你没有使用/etc/network/interface来配置各个网络接口。
打开/etc/dhcpcd.conf

nano /etc/dhcpcd.conf

粘贴以下内容,然后按Ctrl+X,再按Y,保存并退出。

interface wlan0
static ip_address=192.168.233.1/24
nohook wpa_supplicant

之后重启dhcpcd服务

systemctl restart dhcpcd

其中192.168.233.1可以改成任何你想分给树莓派无线网卡的ip地址,这里相当于路由器的LAN口IP。
/24是子网掩码

0x04. 配置DHCP服务器

直接执行以下两行代码

echo "interface=wlan0" >> /etc/dnsmasq.conf
echo "dhcp-range=192.168.233.100,192.168.233.199,255.255.255.0,24h" >> /etc/dnsmasq.conf

0x05. 配置hostapd

打开hostapd配置文件

nano /etc/hostapd/hostapd.conf

粘贴以下内容,然后按Ctrl+X,再按Y,保存并退出。

interface=wlan0
driver=nl80211

hw_mode=a
ieee80211n=1
ieee80211ac=1
ieee80211d=1
ieee80211h=1
require_ht=1
require_vht=1
wmm_enabled=1
country_code=US

vht_oper_chwidth=1
channel=149
vht_oper_centr_freq_seg0_idx=155
ht_capab=[HT40-][HT40+][SHORT-GI-40][DSSS_CCK-40]

wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

ssid=Pi_AP
wpa_passphrase=23336666

ssid通俗来说就是Wi-Fi的网络名

wpa_passphrase就是Wi-Fi的密码

ssidwpa_passphrase可以随意更改,但要注意wpa_passphrase在8字节以上

channel一般来说不必改,因为中国可用的ISM频段想要连续80MHz频宽,无论怎么调都没法满足两个AP毫无频段重叠。

country_code一定要有且必须是US,曾经试过改成CN无法启动,不知道为啥。

将配置文件路径写入服务配置文件中,并启动服务

echo "DAEMON_CONF=\"/etc/hostapd/hostapd.conf\"" >> /etc/default/hostapd

启动AP和DHCP服务器

systemctl start hostapd
systemctl start dnsmasq

0x06. 在iptables开启IPv4 NAT与IPv6透传

打开/etc/rc.local

nano /etc/rc.local

在exit 0那一行之前的行加入以下内容,然后按Ctrl+X,再按Y,保存并退出。

#开启IPv4 NAT
iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADE

#开启IPv6透传
ebtables -t broute -A BROUTING -p ! ipv6 -i eth0 -j DROP
brctl addbr ipv6br
ifconfig ipv6br up
brctl addif ipv6br eth0
brctl addif ipv6br wlan0

其中,ebtables -t broute -A BROUTING -p ! ipv6 -j DROP非常重要。

一定要在连接桥接网卡的两个接口之前先执行。

它使桥接的两个网卡除了IPv6以外的协议不互通。

然后执行rc.local脚本

/etc/rc.local

0x07. Enjoy it!

3 Responses

  1. 现在 drcom.py 不太好使了,一天要重连十几次,暂时采取的方案是寝室路由器全局代理到连接校园网的主机上进行中转,目前来看还是挺稳定的

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to Top