把树莓派改造成无线网卡(3)-----共享无线网络,无线网络转换成有线网络,让有线网络设备连上无线网络

现在的无线路由器非常便宜,所以实际上除了有特殊的要求比如搭建VPN之类的需求处,没有人会使用树莓派或者其它安装了Linux系统的主机去配置成无线路由器。有一些老式设备,没有无线网卡也没有USB接口,所以不能简单的通过USB接口扩展一个无线网卡,只能通过有线网卡上网。但无线路由器通常被我们安装在不方便连接网线的地方,所以我们有时候会需要共享无线网络或者说是将无线网络转换成有线的以太网络。如下图:

                                                     +- RPi -------+          +- old pc1----+
                                                     |         Eth0+----------+ Eth0        |    
                 +- Router ----+                     |  DHCP server|          | 10.0.0.10   |
                 | Firewall    |                     |   10.0.0.1  |          |             |
(Internet)---WAN-+ DHCP server +-WLAN AP-+-)))   (((-+ WLAN        |          +-------------+
                 | 192.168.3.1 |                     |             |          
                 +-------------+                     |             |   
                                                     |             |
                                                     |             |                                                     
                                                     +-------------+  
                                                                       

相当于给老式设备添加了一块无线网卡。
归结起来需要以下4步:

  1. 开启IP转发功能
  2. 开启SNAT/IP伪装
  3. 为网卡配置静态IP
  4. 启动DHCP和DNS

本文档描述的方法在:最新树莓派OS bullseys + 树莓派 zero W上测试通过过。

1、准备工作

  1. 树莓派的管理员权限
  2. 最好是,通过直接将屏幕和键盘连接到树莓派的本地访问模式(免得设置过程中因为ip的变化导致ssh连接中断)
  3. 树莓派已经连接到以太网并正常启动
  4. 升级到最新的树莓派操作系统,如果在此配置过程中安装了软件包,则记得重启树莓派,确保安装正确完成。
  5. 当前的网络配置为:
  6. 树莓派连接的以太网网络的 IP 配置:
    在以太网 LAN 上配置了 IP 网络10.10.0.1/24,树莓派将接入192.168.3.1/24的无线网络。
  7. 准备好一台有线以太网客户端设备,比如笔记本电脑、智能手机等,用于测试。

2、安装DNS和配置管理软件

  1. 为了给老旧的有线以太网络客户端提供网络管理服务(DNS、DHCP),树莓派需要安装软件包dnsmasq:
sudo apt install dnsmasq
  1. 安装netfilter-persistent及其插件iptables-persistent。这二个程序用于保存防火墙规则并在 Raspberry Pi 启动时恢复它们:
sudo apt install -y netfilter-persistent iptables-persistent

3、设置网络路由功能

在这个配置里树莓派将无线网络和以太网网络之间提供路由功能,接入无线网络,并将无线网络转换成有线网络,或者说将无线网络分享给有线客户端,为有限客户端提供互联网访问。

3.1、树莓派的有线网络接口IP配置

树莓派为有线网络运行一个DHCP服务器;树莓派的有线网卡eth0需要配置成静态IP 。树莓派这时是做为这个新的网络上的路由器,一般都会配置成这个IP子网里的第一个IP地址:10.0.0.1。

我们需要修改配置文件dhcpcd:

sudo vi /etc/dhcpcd.conf

在文件末尾添加以下内容:

interface eth0
    static ip_address=10.0.0.1/24

3.2、启用路由和IP伪装

配置树莓派让有线客户端可以通过无线网络访问主网络上的计算机或者访问互联网。我们需要启用IP转发功能(允许流量在树莓派中从一个网络流向另一个网络),用以下命令创建一个文件:

sudo vi /etc/sysctl.d/routed-ap.conf

文件内容如下(开启IPv4的转发功能)):

# Enable IPv4 routing
net.ipv4.ip_forward=1

开启IP转发功能后,因为我们不能修改主路由器配置,所以为了让10网段的有线终端可以访问外网,树莓派需要开启IP“伪装”功能,把有线终端的IP地址替换为自己在无线网络上的IP地址192.168.3.xx。

  • 从上行方向,树莓派会把有线终端来的数据都替换成自己的WLAN的IP地址,所以对主路由器来说,看到的只有树莓派的IP地址的数据。
  • 从下行方向角度,树莓派会把外部来的数据都替换回各个有线终端的IP地址,并把数据发送给有线终端

我们需要在树莓派上开启IP伪装,既NAT功能:

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

保存并通过netfilter-persistent服务在系统启动时自动启用这个IP伪装功能

sudo netfilter-persistent save

注意,这个NAT规则,是保存到目录/etc/iptables/ 中的。

3.3、为有线网络配置DHCP和DNS服务

前面安装的dnsmasq提供了DHCP和DNS服务, 默认的配置文件模板很大,但我们其实只需要其中很小的功能,所以这里我们选择从空文件开始添加配置,这样还更容易一些。

备份原始的配置模板文件,并新建一个空的配置文件:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo vi /etc/dnsmasq.conf

把以下内容添加到文件中并保存:

interface=eth0 # Listening interface
dhcp-range=10.0.0.2,10.0.0.20,255.255.255.0,24h
                # Pool of IP addresses served via DHCP
domain=eth0     # Local wireless DNS domain
address=/gw.eth0/10.0.0.1
                # Alias for this router

树莓派会在10.0.0.2和之间10.0.0.20选择一个IP为有线终端端提供IP地址,租用时间为 24 小时。

4、运行

重启树莓派,并测试有线接入点是否已经可用。

sudo systemctl reboot

树莓派重新启动后,使用有线客户端就会自动分配到一个10网段的IP地址。也可以正常的访问外网了。

5、进阶–将二个以太网口加入到同一个网桥

我们的树莓派有二个以太网口,如下图所示,所以更好的和家用路由器更一至的方案是:

  • 把二个网卡都利用起来,为了让二个以太网卡可以盲插,随便连接哪个网口都可以分配到10.0.0.0/24网段的IP地址。
  • 让二个网卡加入网桥,相互之间的数据可以在二层直接转发,相当于形成了二个LAN口的,让二个LAN口之间有二层交换功能。

在这里插入图片描述

拓扑图如下:
在这里插入图片描述

                                                     +- RPi -------+          +- old pc1----+
                                                     |         Eth0+----------+ Eth0        |    
                 +- Router ----+                     |  DHCP server|          | 10.0.0.10   |
                 | Firewall    |                     |   10.0.0.1  |          |             |
(Internet)---WAN-+ DHCP server +-WLAN AP-+-)))   (((-+ WLAN        |          +-------------+
                 | 192.168.3.1 |                     |             |          
                 +-------------+                     |             |          +- old pc2----+
                                                     |         Eth1+----------+ Eth0        |   
                                                     |             |          | 10.0.0.4    |                                                       
                                                     +-------------+          |             |
                                                                              +-------------+
  1. 将二个网卡eth0, eth1都加入网桥br0
    将以下三个文件放到/etc/systemd/network目录下
ls -l /etc/systemd/network/br*
-rw-r--r-- 1 root root 40 May 22 21:19 /etc/systemd/network/br0-menber-eth0.network
-rw-r--r-- 1 root root 40 May 22 21:19 /etc/systemd/network/br0-menber-eth1.network
-rw-r--r-- 1 root root 30 May 22 21:19 /etc/systemd/network/bridge-br0.netdev

文件内容分别为:


cat /etc/systemd/network/br0-menber-eth0.network
[Match]
Name=eth0

[Network]
Bridge=br0
cat /etc/systemd/network/br0-menber-eth1.network
[Match]
Name=eth1

[Network]
Bridge=br0
cat /etc/systemd/network/bridge-br0.netdev
[NetDev]
Name=br0
Kind=bridge

  1. 开启systemd/networkd服务
sudo systemctl enable systemd-networkd
  1. 让dhcp server工作在虚拟的br0接口上

把以下内容加入/etc/dhcpcd.conf文件中

denyinterface eth0
denyinterface eth1

interface br0
static ip_address=10.0.0.1/24

把以下内容加入到/etc/dnsmasq.conf文件中

cat /etc/dnsmasq.conf
interface=br0 # Listening interface
dhcp-range=10.0.0.2,10.0.0.10,255.255.255.0,24h
                # Pool of IP addresses served via DHCP
domain=br0    # Local wireless DNS domain
address=/gw.br0/10.0.0.1
                # Alias for this router

重启后就可以升级到高阶网桥方案。

猜你喜欢

转载自blog.csdn.net/meihualing/article/details/130755346