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

最近刚入手了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的密码

ssid和wpa_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 -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!


发表评论

电子邮件地址不会被公开。 必填项已用*标注

Back to Top