基于树莓派,实现无线路由功能
Raspberry Pi 3板载了无线网络适配器和陶瓷天线,不需要额外增加无线网卡就可以把它打造成一个无线路由器。有一种方法是给Raspberry Pi刷上OpenWRT等路由器固件,这样它就变成了一个比较正宗的路由器。另一种方法是开启树莓派无线网络适配器的AP功能,并且共享其有线网络。这样依然使用Raspbian系统,可以发挥Raspiberry Pi作为一个微型服务器的优势。
本文主要介绍了如何开启树莓派无线网络适配器的AP功能,并且共享其有线网络,实现无线路由功能。
(1)开启无线适配器的AP功能
Sudo apt-get install hostapd dnsmasq #dnsmasq是DHCP和DNS服务器
Sudo apt-get install isc-dhcp-server #Isc-dhcp-server是安装DHCP服务
(2)设置静态IP
将无线接口wlan0的IP配置成静态地址。
首先让dhcpcd不再管理wlan0,避免设置冲突。
vi /etc/dhcpcd.conf
在文件的开头增加一行:
denyinterfaces wlan0
vi /etc/network/interfaces
将wlan0相关的内容修改成如下内容:
192.168.0.1是给树莓派做路由器分配的网关IP,这个不能与局域网其他路由器网关IP重复,若重复此处可以修改IP地址为其他网关。
(3)重启服务和wlan0
service dhcpcd restart
ifdown wlan0
ifup wlan0
(4)安装hostapd
vi /etc/hostapd/hostapd.conf #新建配置文件
interface=wlan0 # 把无线网卡wlan0 作为接入点
driver=nl80211 # 使用nl80211驱动
ssid=RaspberryPi # 共享网络的SSID是RaspberryPi
hw_mode=g # 网卡工作在802.11G模式
channel=11 # 无线网卡选用11信道
wpa=2 # WPA2 配置
wpa_passphrase=raspberry # wpa密码是raspberry
wpa_key_mgmt=WPA-PSK # 认证方式为WPA-PSK 加密方式为CCMP
wpa_pairwise=CCMP
rsn_pairwise=CCMP
beacon_int=100
auth_algs=3
wmm_enabled=1
ssid= 输入无线网络的名字,wpa_passphrase= 输入密码。
测试配置是否正确:
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
通过手机等设备应该可以搜到名为RaspberryPi的WiFi,还不需要连接。
如果没有问题,按Ctrl+C停止测试。
使上述设置生效:
vi /etc/default/hostapd
将 #DAEMON_CONF="" 修改为 DAEMON_CONF="/etc/hostapd/hostapd.conf"。
sudo service hostapd restart
(5)配置DHCP服务
#备份配置文件:
cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
#编辑新的配置文件;
vi /etc/dhcp/dhcpd.conf
修改成如下内容:
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.100;
option routers 192.168.10.1;
option broadcast-address 192.168.10.127;
option domain-name-servers 8.8.8.8,8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
}
#重启DHCP服务
service isc-dhcp-server restart
(6)开启ip路由转发
方法一(暂时):
echo 1 > /proc/sys/net/ipv4/ip_forward
方法二(永久):
sudo vim /etc/sysctl.conf
去掉net.ipv4.ip_forward=1 注释。
sudo sysctl -p
(5)设置iptables的NAT转发功能
通过iptables的NAT转发规则实现在外网可以直接访问局域网内的服务器进行远程连接。
iptables -F
iptables -X
# 设置转发规则:
#目的:在nat表的POSTROUTING链的尾部伪装一个eth0网卡用于报文流出
#iptables -t 表名 -A 在哪个链的末尾添加规则 -o 报文流出的网卡 -j 动作
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#目的:eth0和wlan0相互交换数据
#iptables -A 链名 -i 报文流入的网卡 -o 报文流出的网卡 -m 使用什么的扩展模块(使用state的扩展模块)模块内容 -j 动作
#--state RELATED,ESTABLISHED:匹配已经建立的连接或由已经建立的连接所建立的新连接。即匹配所有的TCP回应包。
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A 链名 -i 报文流入的网卡 -o 报文流出的网卡 -j 动作
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
# 将转发规则保存到防火墙配置中
sudo sh -c “iptables-save > /etc/iptables.ipv4.nat” #sh -c string:命令从-c后的字符串读取。
#设置为开机自动加载:
sudo vim /etc/rc.local
在exit 0上方增加:
iptables-restore < /etc/iptables.ipv4.nat
(6)启动服务
Service hostapd start
reboot
至此,树莓派已实现无线路由功能。