【树莓派4B】八、树莓派软路由,Ubuntu18.04配置路由转发

我的目的是通过把树莓派做成一个软路由,相当于一个智能路由器。


材料

树莓派4B,操作系统其实可以是其他的Linux版本。以为4B自带无线网卡,就用自带无线网卡作为路由出口。我的系统是Ubuntu 18.04

大概思路

在这里插入图片描述

具体步骤

配置两个网卡的IP

sudo vim /etc/network/interface

这里设置静态IP,也可以动态获取。


#Local loopback
auto lo
iface lo inet loopback

#Ethernet0
auto eth0
iface eth0 inet static
address 192.168.137.10
netmask 255.255.255.0
gateway 192.168.137.1
dns-nameserver 8.8.8.8

allow-hotplug wlan0

#iface wlan0 inet dhcp
iface wlan0 inet static
address 192.168.4.1
netmask 255.255.255.0

安装hostapd创建热点

sudo apt-get install hostapd

配置hostapd服务器,建立配置文件: vi /etc/hostapd/hostapd.conf,并输入以下内容:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

在这里插入图片描述

sudo vi /etc/hostapd/hostapd.conf

写入如下配置项。注意要根据自己的实际情况,替换 ??? 处的内容:

  • ssid: WiFi 名称,8~64 个字符,最好用英文字母,不要出现特殊字符
  • hw_mode: WiFi 网络模式,一般填 g 即可,设备支持的话可以填 a 启用 5G 频段:
    a = IEEE 802.11a (5 GHz)
    b = IEEE 802.11b (2.4 GHz)
    g = IEEE 802.11g (2.4 GHz)
  • channel: 信道编号。如果上面配置了 hw_mode=g 使用 2.4G 频段,则一般填 7 即可。如果配置了 5G 频段,则信道编号有所不同,具体参考:WLAN信道列表
  • wpa_passphrase: WiFi 密码,最好用英文加数字,不要出现特殊字符
#5GHz MODE
# 设置默认的接入点为无线网卡 wlan0
interface=wlan0

#设置驱动程序为 nl80211
driver=nl80211

#无线路由器工作模式为80211a(5G)  
hw_mode=a
ieee80211n=1
ieee80211ac=1
ieee80211d=1
ieee80211h=1
require_ht=1
require_vht=1
vht_oper_chwidth=1
channel=149
vht_oper_centr_freq_seg0_idx=155
ht_capab=[HT40-][HT40+][SHORT-GI-40][DSSS_CCK-40]

# 设置加密模式为 WPA2
wpa=2
# 开启 WMM
wmm_enabled=1
country_code=US
# 设置加密方式为CCMP
wpa_key_mgmt=WPA-PSK
# 使用 AES, 而非 TKIP
rsn_pairwise=CCMP


# 设置无线网络 SSID 为 Lili
ssid=Lili
# 设置密码为741852123
wpa_passphrase=741852123

最后,启动 hostapd 服务。

sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
sudo reboot

如果出现:Interface wlan0 wasn't started

扫描二维码关注公众号,回复: 11846878 查看本文章
#sudo nmcli nm wifi off
sudo rfkill unblock wlan
sudo ifconfig wlan0 192.168.4.1/24 up
sudo service hostapd restart

注意配置文件不能有行是单独的空格,等号两边不要留空格。

这个时候已经可以看到热点了,但是手机连接会发现没有IP分配。在这里插入图片描述

无线hostapd错误"nl80211: 无法配置驱动程序模式"


配置DHCP服务

  • 安装
sudo apt-get install isc-dhcp-server
  • 配置
 sudo vi /etc/default/isc-dhcp-server

改成目标网卡
sudo service isc-dhcp-server start
DHCP池

sudo vi /etc/dhcp/dhcpd.conf
subnet 192.168.4.0 netmask 255.255.255.0 {
    
    
  range 192.168.4.10 192.168.4.100;
  option routers 192.168.4.1;
  option broadcast-address 192.168.2.255;
  option domain-name "lili.com";
  option domain-name-servers 8.8.8.8,8.8.4.4;
  default-lease-time 600;
  max-lease-time 7200;
}
subnet <eth0的地址> netmask <eth0的地址掩码> {
    
    
  range <DHCP起始地址> <DHCP结束地址>;
  option routers <wlan0地址>;
  option broadcast-address <广播地址>;
  option domain-name-servers 8.8.8.8,8.8.4.4;
  default-lease-time 600;
  max-lease-time 7200;
}

如下图:
注释掉以 option domain - name 为开头的两行,以取消对域名的设置。
在这里插入图片描述
开启服务

sudo service isc-dhcp-server start

如果不成功:

sudo ifconfig wlan0 192.168.4.1/24 up

这个时候已经能够连上树莓派的的热点了,有IP分配,但是不能上网

打开Linux系统的路由转发功能

这里是Ubuntu 18.04
开启IP转发

sudo vi /etc/sysctl.conf

去掉这一行的注释

#net.ipv4.ip_forward=1

在这里插入图片描述
保存,用下列命令使命令生效

sudo sysctl -p

配置路由表

sudo iptables -A FORWARD -i wlan0 -j ACCEPT
sudo iptables -A FORWARD -o wlan0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING ! -o wlan0 -j MASQUERADE
#把eth0网卡的数据包通过nat转发到wlan0,根据自己的需要修改相应的网卡

注意这里/proc/sys/net/ipv4/ip_forward里面内容为为1,表示开启IP转发,但是重启后会失效,故需要修改 /etc/sysctl.conf

这个时候能够正常连接热点并且上网了

完成配置,检查是否配置成功

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

如果最后两行出现了如下,则为正常

wlan0: interface state UNINITIALIZED->ENABLE
wlan0: AP-ENABLED

遇到任何问题,包括之前的服务配置,都可以使用

sudo nano /var/log/syslog

调到最后一行查看,分析原因


最后的结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


开机启动

在树莓派Raspberry Pi系统或者其他linux。
可以加在/etc/rc.local 中,开机自动添加路由规则

!注意!:请一定在exit 0之前添加

#/etc/rc.d/rc.local 用于添加开机启动命令
sudo vi /etc/rc.local


#在exit 0之前加入
#这三句根据需求加入开机启动
#sudo ifconfig wlan0 192.168.4.1/24 up
#sudo service isc-dhcp-server start
#sudo service hostapd start
sudo iptables -A FORWARD -i wlan0 -j ACCEPT
sudo iptables -A FORWARD -o wlan0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING ! -o wlan0 -j MASQUERADE

但是Ubuntu 18.04开机启动的方式不同
Ubuntu18.04 不再使用initd管理系统,改用systemd.改变太大,跟之前的完全不同。不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.local重新发挥作用。

参阅下列链接
https://www.cnblogs.com/airdot/p/9688530.html

1、建立rc-local.service文件

sudo vi /etc/systemd/system/rc-local.service

2、将下列内容复制进rc-local.service文件

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
 
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
 
[Install]
WantedBy=multi-user.target

3、创建文件rc.local

sudo vi /etc/rc.local

4、将下列内容复制进rc.local文件

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
echo "看到这行字,说明添加自启动脚本成功。" > /usr/local/test.log
exit 0

5、给rc.local加上权限

sudo chmod +x /etc/rc.local

6、启用服务

sudo systemctl enable rc-local

7、启动服务并检查状态

sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

8、重启并检查test.log文件

cat /usr/local/test.log  

如果能看到内容,说明设置成功,你就可以通过编辑rc.local文件来设置启动脚本了

在这里插入图片描述


现在,连接到树莓派的无线热点,即可正常连接互联网。

树莓派(Raspberry Pi 3) - 树莓派打造无线路由器
无线hostapd错误"nl80211: 无法配置驱动程序模式"
[趴会儿project]No.003 基于树莓派的ipv6+OpenVPN校园网免流量无线热点/路由器
Ubuntu Server(18.04)开启路由转发搭建软路由
用dnsmasp
树莓派3B+ 无线路由(hostapd)
其他资料
WLAN信道列表
开机启动
ubuntu-18.04 设置开机启动脚本

快速调试命令汇总

sudo ifconfig wlan0 192.168.4.1/24 up
sudo service isc-dhcp-server start
sudo service hostapd start
ifconfig
sudo vim /etc/network/interface
ip add
sudo ifconfig wlan0 192.168.4.1/24 up

sudo systemctl start dnsmasq
sudo systemctl restart dnsmasq
sudo systemctl stop dnsmasq
sudo systemctl status dnsmasq

vi /etc/dhcp/dhcpd.conf
sudo vim /etc/default/isc-dhcp-serve
 /etc/init.d/isc-dhcp-server restart
sudo service isc-dhcp-server restart
sudo systemctl start isc-dhcp-server
sudo systemctl restart isc-dhcp-server
sudo systemctl stop isc-dhcp-server
#不想要dnsmasp
dpkg --list
sudo apt-get --purge remove 包名
#--purge是可选项,写上这个属性是将软件及其配置文件一并删除,如不需要删除配置文件,可执行sudo apt-get remove 包名

下期树莓派搭建局域网Web服务器

附录

其他配置参考

# 设置默认的接入点为无线网卡 wlan0
interface = wlan0
 
# 设置驱动程序为 nl80211
driver = nl80211
 
# 设置网卡工作模式为 802.11G
hw_mode = g
 
# 设置无线网络 SSID 为 RaspberryPi
ssid = RaspberryPi
 
# 设置无线通道为5,如果发现连接速度慢或有干扰,也可以设置为其他数值
channel = 6
 
# 设置加密模式为 WPA2
wpa = 2
 
# 设置密码为123456789
wpa_passphrase = 123456789
 
# 设置加密方式为CCMP
wpa_key_mgmt = WPA-PSK
wpa_pairwise = CCMP
rsn_pairwise = CCMP
beacon_int = 100
auth_algs = 3
wmm_enabled = 1
wmm_enabled=1

5GHz Mode

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=wifiname
wpa_passphrase=1234567890
// 基本信息
# 无线网卡的名称
interface=wlan0
# 网卡对应的驱动名  
driver=nl80211
# 无线网络的名称是Pi-wifi  
ssid=Pi-wifi
# 无线路由器工作模式为80211g(2.4G)  
hw_mode=g
# 无线网卡使用的信道
channel=10
# 支持 802.11n
ieee80211n=1
# 采用WPA2配置  
wpa=2
# 无线网络密码是123456789  
wpa_passphrase=123456789  
# 认证方式为WPA-PSK  
wpa_key_mgmt=WPA-PSK
# 开启 WMM
wmm_enabled=1
# 开启 40MHz channels 和 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
# 接受所有 MAC 地址
macaddr_acl=0
# 使用 WPA 认证
auth_algs=1
# 需连接者知道ssid
ignore_broadcast_ssid=0
# 使用 WPA2
wpa=2
# 使用预先共享的 key
wpa_key_mgmt=WPA-PSK
# 使用 AES, 而非 TKIP
rsn_pairwise=CCMP

DHCP配置解释

subnet 10.0.0.0 netmask 255.255.255.0 {
    
    
range 10.0.0.10 10.0.0.100;
option domain-name-servers 202.206.192.33, 223.5.5.5;
option domain-name "mylab.com";
option subnet-mask 255.255.255.0;
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
default-lease-time 600;
max-lease-time 7200;
}

逐行进行解释

#subnet后跟子网网段,netmask后跟子网掩码
subnet 10.0.0.0 netmask 255.255.255.0 {
    
    
#地址池
range 10.0.0.10 10.0.0.100;
#DNS服务器地址(多个地址用","隔开)
option domain-name-servers 202.206.192.33, 223.5.5.5;
#为所分配的域分配域名
option domain-name "lili.com";
#为所分配的主机分发子网掩码
option subnet-mask 255.255.255.0;
#分发默认网关
option routers 10.0.0.1;
#分发广播地址
option broadcast-address 10.0.0.255;
#默认租期时间()
default-lease-time 600;
#最大租期时间()
max-lease-time 7200;
}

猜你喜欢

转载自blog.csdn.net/qq_42820594/article/details/107375029