步骤记录

rpi的物理网口作为wan口,无线网络作为lan

1
2
flowchart LR
光猫 --> 主路由 -->|以太网| rpi -->|无线| 上网设备
  1. 刷入immortalwrt
  2. 有线网连接树莓派,可能需要手动配置一下ip地址,使设备和树莓派处在同一个网段中
  3. 将lan口配置为:
    1. 协议:静态地址
    2. 设备:br-lan 设备:phy0-ap0
    3. ipv4地址:192.168.8.1(可以选一个和主路由不冲突的)
    4. ipv4网关留空(会默认配置为192.168.31.1,也就是主路由的网关)
  4. 新建一个wan口:
    1. 协议:DHCP客户端
    2. 设备:br-lan 设备:eth0
  5. 配置防火墙:在网络-防火墙-区域中,设置lan到wan的规则中,wan口启用IP动态伪装。这个也称为源NAT/IP masquerading

解释

想进行代理有大概两种思路:

  1. 把rpi视作一个上网设备,配置设备为br-lan,协议静态地址,ipv4地址选一个与主路由相同网段的(例如192.168.31.150之类的),并在DHCP里勾选忽略此接口(也就是此接口不提供DHCP服务,因为同一个网段里只能有一个DHCP服务器,192.168.31.1已经负责DHCP了)。然后开启热点。其他上网设备连接此热点上网。此时如果不做配置,上网设备仍会将192.168.31.1作为默认网关。树莓派就只会把网络流量转发给192.168.31.1而不做任何处理(没有代理),此时树莓派只是一个中继器而已。但是理论上可以在上网设备中手动指定一个ip地址,并把网关设置为树莓派地址(比如192.168.31.150),此时树莓派就有代理职责了,相当于你告诉rpi,我要从你这里上网了!但这样做的缺点是,每个连上热点的设备都必须手动指派一下这个网关,否则rpi还是会把流量全推给主网关(理论上是这样的,中途放弃了,没有完整实践过)。
  2. 把rpi视作一个路由器,创建一个新子网,它来当网关(比如192.168.8.1)。然后这个子网与主路由的主网相连。rpi负责收集子网内所有流量,转发给主网。它也同时负责子网的DHCP服务。这样一来设备联网就不需要额外的配置了,比较优雅一点。

笔记

  • 路由器的配置通常以接口为单位,而不是路由器。这样路由器可以实现更复杂的配置关系
  • br-lan设备实际上可以认为是接入的物理网口+无线局域网的抽象,包含了这两个元素
  • OpenWRT默认配置一个lan口,但是还需要手动创建一个wan口,并且配置为dhcp客户端
  • DHCP有时不会正确分配IP地址,导致连不上网关。这个时候需要手动设置一下IP地址、网关等
  • 按照这样的顺序排查问题会比较合理
    1. OpenWRT上ping/curl www.baidu.com
    2. 本地设备ping gateway_ip_addr
    3. 本地设备ping www.baidu.com

疑问

实际上有比较多错误,请参考这个帖子

  • 为啥lan口设备设置为无线网络,wan口设备设置为eth0不行?
  • 防火墙的lan=>wan的配置默认没有IP动态伪装,wan=>reject的反而默认开了,没太搞懂
  • immortalwrt的防火墙默认设置里,lan=>wan的这条规则是不开启masquerading的,不知道为什么会这样
  • GPT说ipv4网关应该是192.168.8.1,也就是rpi自己,但是不知道为什么不让填自己,这里不是很明白