1 Star 0 Fork 11

coder_lw / wiki

forked from deepinwiki / wiki 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
openwrt网络配置.md 22.11 KB
一键复制 编辑 原始数据 按行查看 历史

openwrt 网路配置

前言

本文介绍一个主流的路由器操作系统的网络配置。

网络概念

概念清晰是很重要的,网络技术非常繁杂,因此应该明确概念,然后才能实施适当的组网方案。

openwrt 涉及的网络概念:

  1. 接口:通信端口,二层通信只需端口标识,三层通信需要地址。openwrt中的接口一般是指虚拟接口,子接口(软件接口),openwrt中称为连接器(Connector)
  2. 网卡(NIC,Network Interface Card):物理网卡设备,物理接口。openwrt 中称为控制器(controller)
  3. lan口: 连接内部子网的端口。一般路由会提供多个lan口,连接多个下级设备,他们同属同一个子网。这些lan口之间可以理解为形成了一个交换机,下级设备可以直接通信。
  4. wan口:连接外部网络的端口。一般只有一个。lan口设备通过wan口路由转发通信到外部网络。
  5. vlan:二层划分子网的技术(IEEE 802.1Q/ad 标准),openwrt 内部通过将lan口和wan口划分到不同的vlan,这样就不需要两张物理网卡,也可以隔离lan口和wan口所代表的两个子网。普通家用应用场景:有些地方需要端口设置vlan才能看IPTV电视。
  6. 桥接(bridging):多个接口组成一个虚拟交换机。有点类似vlan的逆向操作。
  7. 进站:ip包,目标ip是本机。过程:外部 --> PREROUTING --> INPUT --> 本机
  8. 出站:ip包,源ip是本机。 过程:本机 --> OUTPUT --> POSTROUTING --> 外部
  9. 转发:ip包,目标和源地址都不是本机。过程: 外部 --> PREROUTING --> FORWARD --> POSTROUTING --> 外部哦
  10. 防火墙:数据筛选,转发路径控制,ip包修改等
  11. 单臂路由:一条链路上集成lan口和wan口通信。
  12. 旁路由:即网关服务器。只需要lan口。
  13. dhcp:自动分配ip的服务器
  14. ipv6:ipv4的升级版,无nat
  15. nat: 转发时用主机ip替换掉源ip,用nat表的ip+端口跟踪和内部设备的对应关系
  16. ap: wifi设备
  17. trunking:中继链路,通过对不同vlan 打标签(tagging),从而在一条链路上聚合多个网络。
  18. 链路聚合:组合多个接口提高吞吐量(IEEE 802.3ad/802.1AX 标准,LACP 以太网链路聚合控制协议).
  19. 二层设备:以 mac 地址做标识,连接不同端口建立链路通信。vlan 建立在二层,即通过 mac+tag 的形式组成二层子网络(广播域)。
  20. 三层设备:以ip地址做标识,划分不同网段,形成子网,子网间通信需要路由转发。
  21. 网关:终端设备默认发送的路由目标地址,网关服务器具备ip包转发等功能。
  22. DNS:将网址转换为ip地址的服务器。
  23. 隧道接口:基于隧道协议的信道。
  24. wlan:无线wifi接口。
  25. bongding: 绑定,多个接口绑定形成一个信道。

原理分析

作为不是一个受过专业训练的普通用户,网络通信的相关概念纷繁复杂,如何才能快速且高效的完成组网目标?我这里有一个方法,就是从通信数据包出发,分层的理解网络,这样才不会出现去用两层设备完成三层设备的功能的无用功。

因为基础不扎实,所以很多人只能去模仿他人的方案,而不知道具体的原理,这在有些时候是可以的,但是有时候就容易被表面现象所误导。比如现在很多路由器 lan 口和 wan 口实际是可以设置的,如果你看到别人教程插 lan 口,却没有发现背后的原理实际是一个路由转发,实际是实现了 wan 口的功能,那你就容易被误导了。

因此,原理分析的作用,就是让你知道别人做了什么,你应该如何通过自己的设备通过同样的原理(或类似原理)组网。

而原理分析最有效的方法,是通过分析通信数据包。因为通信的原理实际上是不停的包裹各层处理的结果,添加本层需要的数据,它实际上就直接映射了工作原理。我们只要知道它需要怎样的数据,而我们的设备能不能提供这样的数据,然后才有可能进行配置。

当然我们也不需要像学习网络通信技术的科班生那样,对数据包的具体内容做过多的了解。毕竟我们只是为了完成家庭组网。

网络层次数据分析:

  1. 物理层:就是一根网线就能完成的,典型设备是:集线器。
    1. 处理内容是:频率,速度,工作模式(单工,半双工,双工)。
    2. 智商:无脑转发。
    3. 数据包:无要求。
  2. 数据链路层:集线器是无脑转发的,而链路层就是添加了动态链路,两个端口可以建立特定通信。典型设备是:交换机。
    1. 处理内容:帧同步/纠错,流量控制,MTU,MAC;vlan 将端口分组,只对同组端口进行转发和广播。
    2. 智商:根据端口转发
    3. 数据包:通过数据包(帧)的源mac建立端口地址表,目标mac查找地址表端口转发(或广播)。需要注意,mac 地址是数据包里面的数据,交换机自身并不需要有mac地址(除非需要登录具备管理功能的交换机进行管理)。
  3. 网络层:基于端口转发的二层设备,它的功能是有限的。它虽然能够通过vlan划分子区域,但是不同子区域之间怎么通信?这就依赖第三层的网络层。典型设备:路由器
    1. 处理内容:ip,子网划分和转发(路由),ARP 地址解析
    2. 智商:根据mac地址转发
    3. 数据包:路由器是一个复合设备,它同时具备交换机的全部功能,因此需要判断那些是交换机功能,哪些才是路由独有的功能。路由器通过路由表来建立不同子网的转发通信(注意不同子网)。一般交换机的功能是在 lan 口间的一个子网内,而路由是通过 wan 口转到外部不同的子网(或公网)。但是路由器作为一个智能设备,具备强大的控制接口,可以有很多虚拟接口,内部转发等,很容易搞不清楚哪个方式是路由,哪个是普通交换。但是基于ip转发的数据包,和交换机用的帧,有明显不同的要求:目标ip,源ip。

再高的分层结构属于软件层面的,不在我们研究范畴。既然路由器那么厉害,为什么不选用路由器作为组网设备?路由转发对路由性能要求比较高,家庭组网一般建议只用一个路由器,其余用交换机扩展端口。(不追求高性能,多个廉价路由级联是比较简单的,只要路由分配不同的子网段,用wan口连接上级路由的lan口即可)

常见的家庭组网方式:

  1. 简单组网
    1. 光猫(路由)--> pc
    2. 光猫(桥接)--> 路由 --> pc
  2. 扩充端口
    1. 光猫(桥接)--> 路由 --> 交换机 --> pc
  3. 单臂路由(路由只有一个网口)
    1. 光猫(桥接)--> 交换机 --- 单臂路由
      1. 交换机 --> pc
  4. 旁路由(网关服务器,将路由的部分功能分离到另一台路由)
    1. 光猫(桥接)--> 主路由 --> 旁路由lan口
      1. 主路由 --> pc
  5. 二级路由(懒人专用)
    1. 光猫(桥接) --> 主路由 --> 二级路由
      1. 主路由 --> pc
      2. 二级路由 --> pc

光猫可以设置路由模式(它负责拨号上网),还是桥接模式,桥接模式下级就要解一个能拨号上网的路由器。

如果需要无线功能,就在 pc 的位置添加一级无线 ap(即wifi,普通廉价路由器关闭dhcp功能,连接到lan口即可代替专门的 ap)。当然示例中的路由器自身也可以提供 ap 功能,如果你家比较大,可能就要就近提供新的 ap 设备,才能保证良好的 wifi 信号。

添加 wifi 的方式:

  1. 交换机 --> ap -(无线)-> phone
  2. ap -(无线)-> ap -(无线)-> phone

旁路由本身也是路由,所以你也许有疑问,不是说好不要多个路由么?

旁路由的作用是将原本一个路由负责的业务,分散到多台路由设备上,这实际上也等于间接提升了性能,这和单纯的级联路由是不同的。而且旁路由服务崩溃了,也不影响使用主路由的设备的正常上网。

级联的路由概念相对比较清晰,每一个层级都可以单独理解为一个局域网。不建议这样组网的原因是它会增加路由链路,延迟会提高一点。同时多个路由设备增加出错的机率,如上级路由出问题,下面的路由也上不了网。很多用户没有理解路由的作用,只是为了增加接入端口就购置多个路由设备。实际上可以用交换机替代,同等成本下能得到更好的网络性能。

每一层级的路由都有wan口指向上级路由,lan口和 ap 连接下级设备,有固定的且不相同的子网。如果上级需要访问下级设备,需要在上级路由添加指向下级路由wan 口 ip的静态路由即可。而下级设备访问上级设备,默认即可访问上级设备。因为设备的默认网关是路由,而路由本身就是上级子网成员,且成员间能相互通信。

路由转发

路由分lan口和wan口,lan口连接下级设备,wan口连接上级设备。从网络角度,即wan口是上级路由分配的ip,lan口是路由本身设定的子网。

一般转发:

当lan下任意接口收到一个ip包的目标地址不在本地子网,就转发到wan口。当wan下收到目标是子网段的任意ip,就接收。

之后,需要找到该数据包的mac地址。路由有下级所有直接设备的mac地址表,因此从wan口向上级发出去数据包的时候,需要将源mac改写为路由的mac,而源ip不变。当数据返回来的时候,通过路由的mac就能知道链路回到该路由,然后进到路由内部后再次解析内部ip的mac地址即可找到原点设备。

如果数据是从外部发起,想访问内部设备,这个路由就需要在上级路由设置一个静态路由表项,将内部网段的ip转到到该路由的wan口ip。

NAT转发

公网上不允许内网ip段。NAT转发就是将内网ip改写为路由的公网ip。但是改写了ip,数据怎么回来?这就引入了tcp/udp(第四层传输层)端口的概念。路由器虽然是第三层设备,但是它能处理第四层的一些概念。增加端口号后,通过NAT表就能区分不同的内部地址。

逆向操作也是建立一个相关的映射关系。

为啥不允许内网ip段,因为公网ip是唯一的,内网ip不是。公网ip间需要互联互通,而内网多是单向访问外部,只在内部互通。

双NAT问题:

ipv4公网ip稀缺,所以电信运营商可能不会提供一个公网ip给你,这时候你得到的ip实际上是一个内网ip,这ip通过电信的路由器nat到真正的外网,然后你的路由器拿到这个ip 又要经过一次nat,这就是所谓的双重nat问题。

问题在哪里?在于拥有真正的外网ip的路由器不由你控制,而是放在电信机房里面的,因此想从外部访问本地服务就会比较麻烦,需要采取内网穿透等复杂技术。

vlan 技术

vlan(虚拟局域网) 是一个二层技术,二层负责隔离广播,制作子区域(端口分组),打tag,untag。但子区域转发互联由三层负责。

它的原理是,对端口做标记 tag,同tag是相同的区域,广播数据也只在该区域广播。tag 对下级设备是透明,只有交换机可以识别并过滤掉tag,然后将原本的数据包发给下级设备。

主干链路(trunk link):两个交换机,分别都存在vlan1,vlan2标记的端口,这时要把两个交换机连接起来,就需要两根网线,四个端口,分别标注vlan1,vlan2(因为不同标记的端口不能互通消息)。为了节省链路,就使用主干链路(或中继链接)这种技术。它对通过的数据包打上vlan1或vlan2标签,这样另一个交换机就可以识别到两种vlan数据包的不同,从而在一条链路上可以通过多个vlan数据,达到共享链路的作用。

因此交换机实际有两种端口模式:

  1. access 端口: 数据上行会加上tag,下行会解除标签untag(需要和当前端口tag相同),这样可以透明的处理,下面的设备无感知的使用vlan。
  2. trunk 端口: 不进行以上操作,保留tag并允许所有tag通过。因为数据包有 tag,所以不能直接连接到用户设备,而应该通过 access 端口过滤。简而言之,trunk 端口是连接到交换机和路由器的。

在openwrt内部,使用vlan技术将lan口和wan口分配到不同的vlan,然后用中继链路连接到内部路由,这样就可以通过软件设定不同端口的工作模式,比如5个端口,可以4+1,也可以3+2,如果你家有两个宽带,就能通过一台openwrt路由同时接入。

单臂路由

单臂的意思是只有一条物理链路。路由的lan口和wan口的链路需要整合在一起。那究竟是怎样做的?

网络接口可以支持创建子接口。子接口是基于物理接口的虚拟接口,它可以拥有自己的ip配置。因此用两个子接口,一个设置lan ip,一个设置wan ip。并设置默认网关即可。

网关服务器

网关服务器也是一台路由,但使用场景比较特殊:

  1. 不是局域网中的主路由,是个分支路由
  2. 出口是局域网内的其他路由,最终通过主路由访问外网
  3. 可以设置默认网关是局域网中的主路由来上网
  4. 也可以设置通过隧道协议,代理服务器的等方式访问外网。

这里有个重点,就是openwrt它设计了让wan口负责转发数据,lan口处理局域网内部数据,而网关服务器一般不用wan口,一般就只插lan口。

也就是openwrt并没有为网关服务做默认配置,因此想要成为一个网关服务器,涉及修改防火墙转发规则。

修改方法:

实测,连接到lan口,然后防火墙页面,lan区域选中 "ip动态伪装”。然后设置lan ip在子网范围,并固定ip,设置默认网关是主路由ip即可。

有些上级路由,不设置这个 ip动态伪装(类似nat),它会禁止转发来自旁路由的转发请求。比如华为路由器就是如此。

旁路由上的服务虽然没有接wan口,它还是可以通过lan口的转发功能激活相关服务的,但是和作为主路由有些不一样。如果某些服务不正常,可能就是这个使用方式造成的,如果遇到问题,建议让其成为普通的二级路由,这样兼容性会好一些。

或者你可以研究一下防火墙的转发策略。

防火墙

openwrt 的防火墙 fw3 是 netfilter/iptable 的高层界面。

路由和防火墙结合的非常紧密,防火墙控制数据是否可以:

  1. 进站 input
  2. 出站 output
  3. 转发 forward
  4. NAT
  5. 端口转发
  6. 协议:unspec(全部)、ipv4、ipv6、arp、bridge(网桥)、decnet
  7. 流程:PRE_ROUTING(预处理),LOCAL_IN(进站),FORWARD(转发),LOCAL_OUT(出站),POST_ROUTING(发布)
  8. 关联设备:incoming device(传入设备),outgoing device(传出设备)
  9. 区域zone: 默认(default)有lan,wan区域。和lan区域转发到wan区域的规则。防火墙对在区域内的接口做整体配置。
    1. defaults : 配置默认的规则
    2. zone :
      1. lan : lan区域的规则
      2. wan : wan区域的规则
    3. forwarding : 转发规则,默认源 lan区域,目标 wan区域。
    4. rule : 规则
      1. src :源区域。lan区域,wan区域等
      2. src_ip: 源ip,限定来源ip段。
      3. dest_ip: 目标ip,限定目标ip段。
      4. proto:协议类型,tcp,udp,esp,icmp,igmp,tcpudp,udplite,ah,sctp,all等
      5. family:ip类型,ipv4或ipv6或any任意
      6. target:目标规则,ACCEPT(允许),DROP(丢弃),REJECT(拒绝)
      7. dest_port : 目标ip端口
      8. dest : 目标区域。
      9. type: 规则类型,script(脚本)
        1. path : 脚本路径
        2. reload: 重新载入
    5. redirect : 重新导向(nat,端口转发)
      1. src:源区域
      2. src_dport: 源ip端口
      3. dest : 目标区域
      4. dest_port: 目标ip端口
      5. proto: 协议
      6. target: dnat(目标端口转发)处理外部转入的映射,snat(伪装ip,nat)处理内部转出的映射(伪装)

配置文件:

  1. /etc/firewall.user
  2. /etc/config/firewall
# 更新后台服务的防火墙配置
/etc/init.d/firewall reload
# 使用fw3 工具
fw3 reload

openwrt 工作原理

原理图

这张是官网的原理图。结合之前的基础知识:

  1. port 0 -- vlan1 -- tagging -- port 5 -- eth0
  2. prot 1~4 -- vlan0 -- tagging -- port 5 -- eth0

第一条线路是 wan口,它实际是内部交换机 switch et0 的零号端口。注意这个端口可以改变的,关键点是 vlan1。然后通过 tagging (打标签)通过port5端口的中继链路连接到真正的网卡 eth0 上面。

第二条线路是 lan口,它通过 vlan0 标注了 1~4 四个物理端口,中继链路到网卡 eth0 上。

br0 是一个虚拟桥接接口,通过vlan0将 lan口 和 eth2 连接起来。eth2是什么?就是wifi的网卡。

在典型的设备中,openwrt 是这样规划组件的:

  1. LAN : br-lan(radio0 + radio1 + eth0.1)
  2. radio0 : wifi 2G
  3. radio1: wifi 5G
  4. eth0.1 : eth0 的vlan0接口,物理端口1~4
  5. eth0.2 : eth0 的vlan1接口,物理端口0
  6. WAN: eth0.2,负责ipv4配置
  7. WAN6: eth0.2, 负责ipv6配置

openwrt中有两个概念:

  1. 控制器(controller):可以理解为设备
  2. 连接器(Connector):可以理解为可配置的接口

一个控制器,可以有多个连接器,如eth0.2 有 WAN,WAN6。 但反过来不行。

网桥 br 可以让多个控制器组成一个虚拟交换机。但组合之后不能再对其一部分配置连接器。如 br-lan 和 eth0.1 不能有两个连接器配置。

vlan 可以让一个控制器,变成多个控制器。如 eth0 变成 eth0.1 和 eth0.2,但不能再对 eth0 配置连接器。

openwrt 的LAN、WAN在接口页面配置,wifi在无线页面配置,vlan在交换机页面配置。对应的配置文件:

  1. /etc/config/network : 接口和vlan
  2. /etc/config/wireless : 无线

网络配置

路径:

  1. /etc/config/network

接口配置

例子:

config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config interface 'lan'
    option ifname 'eth0.1'
    option proto 'static'
    option netmask '255.255.255.0'
    option ip6assign '60'
	option ipaddr '192.168.3.2'
	option gateway '192.168.3.1'
	option broadcast '192.168.3.255'
	option dns '192.168.3.1'

config interface 'wan'
	option ifname 'eth0.2'
	option proto 'dhcp'

config device 'wan_dev'
	option name 'eth0.2'
	option macaddr 'd4:7f:25:fe:18:25'

config interface 'wan6'
	option ifname 'eth0.2'
	option proto 'dhcpv6'

网络协议:

  1. static 静态
  2. dhcp 动态ipv4
  3. dhcpv6 动态ipv6
  4. pppoe 拨号
  5. relay 中继
  6. none 无(忽略)

协议选项:

  1. ifname 接口名称
  2. type 设置为bridge即创建新网桥
    1. stp 生成树
    2. bridge_empty 空桥
    3. igmp_snooping 内核选项multicast_snooping
    4. multicast_querier 内核选项 multicast_querier
  3. macaddr 硬件 MAC 地址
  4. mtu
  5. auto 自动启动
  6. ipv6 启用ipv6
  7. force_link 强制开启接口(static 协议有效)
  8. disabled 禁用
  9. ip4table 路由表
  10. ip6table ipv6路由表

交换机配置

典型端口分配:

  1. 0: wan
  2. 1,2,3,4: lan
  3. 5: eth1
  4. 6: eth0

例子:

  1. /etc/config/network
config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '1 2 3 4 6t'

config switch_vlan
	option device 'switch0'
	option vlan '2'
	option ports '0 6t'

dns 劫持

端口转发配置:

  1. /etc/config/firewall
config redirect
        option enabled '1'
        option target 'DNAT'
        option src 'wan'
        option dest 'lan'
        option proto 'tcp udp'
        option src_dport '53'
        option dest_port '53'
        option name 'force dns'

dmz 配置

配置单独的vlan 和接口:

  1. /etc/config/network
config switch
    option device 'switch0'
	option vlan '3'
	option ports '1 6t'

config interface 'dmz'
    option ifname 'eth0.3'
    option proto 'static'
    option ipaddr '192.168.30.1'
    option netmask '255.255.255.0'

配置单独的dhcp:

  1. /etc/config/dhcp
config dhcp 'dmz'
    option start '50'
    option limit '70'
    option leasetime '12h'

config host
	option name 'STA-server2'
	option dns '1'
	option mac '24:B6:FD:24:59:B9'
	option ip '192.168.30.20'
	option leasetime '12h'

配置防火墙:

  1. /etc/config/firewall
config zone 
    option name 'dmz'
    option input 'REJECT'
    option output 'REJECT'
    option forward 'REJECT'
    option network 'dmz'

config redirect
    option target 'DNAT'
    option src 'wan'
    option src_dport '80 443'
    option proto 'tcp'
    option family 'ipv4'
    option dest 'dmz'
    option dest_ip '192.168.30.20'
    option dest_port '80'
    option name 'DNAT-HTTP-WAN-DNZ'
    option enabled '1'

# 开启 dmz 到 wan 的 dns 访问
config 'rule'
       option src 'dmz'
       option proto 'tcpudp'
       option dest 'wan'
       option dest_port 53
       option target 'ACCEPT'
       option name 'ACCEPT-DNS-DMZ-WAN'
       option enabled '1'

# 配置从lan到dmz 的 ssh 访问
config rule   
       option src 'lan'
       option dest 'dmz'
       option proto 'tcp'
       option family 'ipv4'
       option dest_port '22'
       option target 'ACCEPT'      
       option name 'ACCEPT-SSH-LAN-DMZ'
       option enabled '1'

# 将路由后台端口从 80 改为 8080
config redirect
        option target 'DNAT'
        option src 'wan'
        option src_dport '8080'
        option proto 'tcp'
        option family 'ipv4'
        option dest_port '80'
        option name 'DNAT-HTTP-WAN-DEVICE'
        option enabled '1'

linux 工具

# 搜索局域网内接口
nmap -sn 192.168.3.0/24

参考

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/coder_lw/wiki.git
git@gitee.com:coder_lw/wiki.git
coder_lw
wiki
wiki
master

搜索帮助