经验分享:利用树莓派开发板制作无线路由器

摸索了一个礼拜,总算将自己手上的树莓派开发板制作成了一个无线路由器。

无线路由器在数据包的传输中会进行NAT转化,并生成NAT表,数据包必须先通过LAN口进入路由器,再由WLAN口出路由器进入Internet,然后才能在Internet上找到对应的服务器…以上为路由器的基本工作原理。

待解决的问题

若让树莓派作为路由器使用,则必须满足下列条件:

  • 开启DNS服务与DHCP服务;
  • 拥有独立的WLAN口与LAN口,自动生成NAT表;
  • 开启数据转发功能,使得无线网卡的数据可通过有线网卡进行发送。

步骤

  1. 安装相关的数据包,取得DNS服务与DHCP服务:
sudo apt-get update
sudo apt-get install dnsmasq hostapd

dnsmasq中提供了DNS与DHCP两种服务,hostapd能使得树莓派的无线网卡工作在无线路由模式,初次搭建出路由器的WLAN口与LAN口。

  1. 关闭无线路由模式,手动设置静态IP:
sudo vim /etc/dhcpcd.conf
# insert the following sentences
denyinterfaces wlan0


sudo vim /etc/network/interfaces
# set the loopback
auto lo
iface lo inet loopback

# set the eth0, eth0 equals to WLAN interface
auto eth0
iface eth0 inet loopback
address 192.168.X.X
netmask 255.255.255.0
gateway 192.168.X.1

# set the wlan0, wlan0 equals to LAN interface
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.Y.Y
netmask 255.255.255.0

sudo reboot

将上述接口配置文件修改之后,网卡eth0等效于路由器的WLAN口,wlan0相当于路由器的LAN口,loopback则是路由器的本地回环(用于检查接口是否正常工作);eth0的网关应设置为其他路由设备LAN口的IP,并且网络号需与LAN口的网络号一致;eth0与wlan0的IP只要不是设置在同一个网络号内即可。树莓派重启之后,网卡便生效了。此时,树莓派已不能连接无线网络,但可以连接有限网络,此时如需远程登录树莓派,只需将树莓派连接上所设置路由设备的LAN口即可。

  1. 设置路由器ID、WiFi密码、信号波段、加密类型
sudo touch /etc/hostapd/hostapd.conf ; chmod a+w /hostapd/hostapd.conf
sudo vim /hostapd/hostapd.conf

# insert the following contents
ssid=XXX
wpa_passphrase=XXX
channel=6
interface=wlan0
driver=nl80211
wpa=2
ignore_broadcast_ssid=0
macaddr_acl=0
wpa_key_mgmt=WPA-PSK
ieeenl80211=1
hw_mode=g
wmm_enabled=1
auth_algs=1
rsn_pairwise=CCMP
ht_capab=[HT40][SHORT-GI-20][DSSS-CCK-40]

ssid和wpa_passphrase表示设置WiFi名称和密码;channel表示使用第六号信道传输数据;interface应设置为LAN口的名称;nl80211是路由器驱动的类型,nl80211驱动按照IEEE标准编写,ht_capab则是设置nl80211中对应参数的值;hw_mode表示设置WiFi信号的波段;WMM表示无线多媒体设备优先连接,(百度了一下,WMM与nl80211有关,是nl80211的一个子集);auth_algs表示自动使用WPA加密算法;rsn_pairwise=CCMP表示用AES加密协议代替TKIP加密协议(TKIP是一种不安全的无线加密协议,目前基本不用,AES较为安全);macaddr_acl=0表示接收所有设备的MAC地址,并进行无线连接。

修改一下hostapd的启动配置文件,使系统一上电就能找到文件的位置:

sudo vim /etc/default/hostapd/

# insert this sentence
DAEMON_CONF="/etc/hostapd/hostapd.conf"
  1. hostapd 命令测试
sudo hostapd -B /etc/hostapd/hostapd.conf

准确做到了这里,打开手机,就能看到你用树莓派设置的WiFi了。

  1. 配置 dnsmasq
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo vim /etc/dnsmasq.conf

#insert the following contents
interface=wlan0
listen-address=192.168.X.1
server=X.X.X.X
domain-need
bogus-priv
dhcp_range=192.168.X.2,192.168.X.254,24h

sudo service dnsmasq restart

server应配置为DNS服务器的IP,一般设为4.2.2.2或8.8.8.8等;dhcp_range表示路由器动态分配IP的范围,只要其设置的范围不包括网关和广播的IP即可,此范围的大小也是路由器最大可以接受的主机数量,后面的时间表示一台主机一次最长可连接的时间l;isten-address应设置为路由器LAN口的IP;bogus-priv表示禁止伪装IP的主机连接到路由器,以免造成其对路由器主机的恶意攻击。

  1. 开启数据转发功能
sudo sh -c "echo > 1 /pro/sys/net/ipv4/ip_forward"

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED 
-j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

将上述命令作为一个shell脚本,写入系统的配置中,让其在树莓派上电之后自动执行:

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

修改系统的启动脚本:

sudo vim /etc/rc.local

sh -c "echo > 1 /pro/sys/net/ipv4/ip_forward"
iptables -restore < /etc/iptables.ipv4.nat

exit 0

最后输入系统重启命令,路由器就可以正常上网了。

猜你喜欢

转载自blog.csdn.net/Donald_Shallwing/article/details/82873077