Set Raspberry as WiFi Router¶
将树莓派3B+改成一个wifi无线路由器
实现以下功能:
1. WiFi工作在802.11ac模式,433Mbps的Link Speed
2. WiFi共享以太网口的网络,IPv4采用NAT
3. 外接USB免驱网卡作为LAN口
1. 更新并安装必要软件¶
2. 打开IPv4转发¶
3. 为网卡配置静态IP¶
需要确保没有使用/etc/network/interface配置网卡
(1) 打开/etc/dhcpcd.conf¶
(2) 在文件最后添加以下内容,保存退出¶
interface eth0
interface wlan0
static ip_address=192.168.3.1/24
nohook wpa_supplicant
interface eth1
static ip_address=192.168.4.1/24
nohook wpa_supplicant
(3) 重启dhcpcd服务¶
- eth0自动获取IP地址,wlan0和eth1分别设置为192.168.3.1,192.168.4.14. 配置DHCP服务器¶
(1) 打开/etc/dnsmasq.conf¶
(2) 在文件最后添加以下内容,保存退出¶
interface=wlan0
dhcp-range=192.168.3.100,192.168.3.200,255.255.255.0,24h
interface=eht1
dhcp-range=192.168.4.100,192.168.4.200,255.255.255.0,24h
5. 配置hostapd¶
(1) 打开/etc/hostapd/hostapd.conf¶
(2) 输入以下内容,保存退出¶
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_WIFI
wpa_passphrase=password
-
ssid通俗来说就是Wi-Fi的网络名
-
wpa_passphrase就是Wi-Fi的密码
-
ssid和wpa_passphrase可以随意更改,但要注意wpa_passphrase在8字节以上
-
channel一般来说不必改,因为中国可用的频段想要连续80MHz频宽,无论怎么调都没法满足两个AP毫无频段重叠。
-
country_code一定要有且必须是US,曾经试过改成CN无法启动。
(3) 将配置文件路径写入服务配置文件¶
(4) 启动hostapd和dnsmasq¶
6. 在iptables中开启IPv4 NAT¶
(1) 打开/etc/rc.local¶
(2) 在Exit 0
之前加入下列内容,保存退出¶
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
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
(3) 执行rc.local脚本¶
7. 关于IPv6¶
(1)额外需要安装软件¶
(2)设置IPv6转发¶
编辑配置文件/etc/sysctl.conf,把下面一行的注释去掉
net.ipv6.conf.all.forwarding=1
(3)根据实际网口获得的全局唯一IPv6,编写配置文件¶
vim /etc/radvd.conf
interface wlan0
{
AdvSendAdvert on;
prefix 2001:da8:7001:251::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
2001:da8:7001:251::/64
为通过ifconfig
获取的Scope:Global
对应的IPv6地址
(4)配置开机自启动¶
编辑/etc/rc.local
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o ppp0 -j MASQUERADE
service radvd start
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP
brctl addbr br0
ifconfig br0 up
brctl addif br0 eth0
brctl addif br0 wlan0
在命令行中输入update-alternatives --set ebtables /usr/sbin/ebtables-legacy
,主要问题在于新版本的ebtalbes对命令的不兼容,需要切换到老版本程序
(5)WARNING!¶
开启IPv6透传后,存在有网络问题,问题原因未知
现象主要为docker网络全挂(可能因为采用Host的网络设置,可能使用Bridge就好了)