在上一篇博客里,我们记录了在虚拟机上运行openwrt中遇到TTL过期问题。今天我们继续前行。尝试着去了解和设置openwrt基础网络配。
首先快速学习了一下《B智能路由开发指南》的网络篇,然后就开始实操了。
运行openwrt虚拟机1:充当普通路由器,命名为router-001。
运行openwrt虚拟机2:充当普通pc,命名为pc-001。
实操目标:pc-001从router-001获取ip,并能访问外网,
一、openwrt 网络基础知识
1.1 openwrt网络接口名称
在openwrt上有各种名词名称,弄的我蒙头转向的,我已经方的不要不要的了。然后就瞎总结了一下。
接口名称 | 名称分类 | 说明 |
eth0,eth0.1,eth0.2,eth1,eth2, ra0,rai0 | 物理网络接口名称 | 这些都是网卡驱动产生的设备节点 |
lo,eth0:1,eth0.1 | 虚拟网络接口名称 | 不代表一个实际存在的硬件设备,同样是由驱动产生的设备节点 |
lan1 | 逻辑网络接口 | 将二层的网络接口名称组合在一起,提供某些逻辑操作。接口的类型决定了接口的逻辑操作 |
lan2 | 逻辑网络接口 | 同lan1,比设备节点高一层,定义在/etc/config/network |
wan | 逻辑网络接口 | 同lan1,比设备节点高一层,定义在/etc/config/network |
zone-lan1 | 安全域名称 | 具有相同防火墙规则的逻辑网络接口,组成的集合 |
zone-lan2 | 安全域名称 | 同zone-lan1,比逻辑网络接口高一层,定义在/etc/config/fireware |
zone-wan | 安全域名称 | 同zone-lan1,比逻辑网络接口高一层,定义在/etc/config/fireware |
1.2 二层的网络接口
二层的网络接口包含物理网络接口和虚拟网络接口。他们直接由驱动产生的网络设备,是linux的3大设备类型之一。
lo是本地回环虚拟接口;eth0.1,eth0.2是vlan产生的虚拟的网络接口。网络设备驱动直接负责了数据收发的实现。
1.3 逻辑网络接口
逻辑网络接口,是openwrt抽象出来的接口,用于对二层的网络接口的统一管理和抽象。 它定义在/etc/config/network里面,定义如下。详情可以参考openert的wiki:https://oldwiki.archive.openwrt.org/zh-cn/doc/uci/network。
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'lan1'
option type 'bridge'
list ifname 'eth0'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '192.168.33.1'
config interface 'wan'
option proto 'dhcp'
option ifname 'eth2'
在/etc/config/network的interface中配置了逻辑网络接口的类型和对应的二层的网络接口集合。值得注意的是当 接口类型选择为‘bridge’时,linux会模拟一个软件实现的交换机。这个模拟的交换机也是工作在数据链路层,通过mac地址进行透明转发的。这个模拟的交换机可以使用ifconfig或者brctl查看,关于linux的模拟详情参考:https://wiki.linuxfoundation.org/networking/bridge#Bridge_priority。
root@OpenWrt:/etc/config# ifconfig
br-lan1 Link encap:Ethernet HWaddr 00:0C:29:A4:B7:34
inet addr:192.168.33.1 Bcast:192.168.33.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fea4:b734/64 Scope:Link
inet6 addr: fd42:5754:213e::1/60 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:601 errors:0 dropped:0 overruns:0 frame:0
TX packets:665 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:37656 (36.7 KiB) TX bytes:83810 (81.8 KiB)
br-lan2 Link encap:Ethernet HWaddr 00:0C:29:A4:B7:3E
inet addr:192.168.44.1 Bcast:192.168.44.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fea4:b73e/64 Scope:Link
inet6 addr: fd42:5754:213e:10::1/60 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1017 errors:0 dropped:0 overruns:0 frame:0
TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:46782 (45.6 KiB) TX bytes:11464 (11.1 KiB)
root@OpenWrt:/etc/config# brctl show
bridge name bridge id STP enabled interfaces
br-lan1 7fff.000c29a4b734 no eth0
br-lan2 7fff.000c29a4b73e no eth1
root@OpenWrt:/etc/config#
1.4 安全域名称
zone是具有相同防火墙规则的逻辑网络接口的集合,这样便于管理。细节参考https://openwrt.org/zh-cn/doc/uci/firewall。
以上的基础知识需要慢慢学习,我还没来的及学习,所以可能说的有错误。
二、配置VMware虚拟网络
在VMware虚拟网络编辑器中, 保证有2个仅主机模式VMnet1和VMnat2 ;和一个Nat模式VMnet8的网络。打开VMnet8 的dhcp服务,关闭VMnet1和VMnet2的dhcp服务。设置VMnat1,VMnet2和VMnat8的网段,并记录。
三、配置路由器router-001
3.1 增加网络适配器
因为我们将openwrt 配置成为路由器,所以只是需要两个物理接口(虚拟的)。我们打开虚拟机设置,增加2网络适配器。适配器1选择VMnet1(仅主机模式);适配器2选择VMnet2(仅主机模式);适配器3选择VMnet8(NAT模式)。
3.2 删除配置
将原来的/etc/config/network的内容全部删掉。/etc/init.d/network restart,然后ifconfig查看一下,发现空空如也。
3.3 基本网络配置
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.255.255.0'
config interface 'lan1_yp'
option ifname 'eth0'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.33.1'
option ipaddr '255.255.255.0'
config interface 'lan2_yp'
option ifname 'eth1'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.44.1'
option ipaddr '255.255.255.0'
config interface 'wan_yp'
option ifname 'eth2'
option proto 'dhcp'
这个是最简单的配置了。
interface:就是逻辑接口的名称。可以随便取名字,但是不能有‘-’这个字符。
ifname:标识 二层的网络接口名称,这个名称由驱动决定,不能随便写。
type:'none' 和 'bridge','bridge'标识是桥设备,系统会自动产生一个br-xxx的网络接口,可以使用ifconfig和brctl show查看。
proto:dhcp为动态获取ip配置,static 表示使用静态的ip配置。
具体的说明参看 1.3 逻辑网络接口中的链接。
到这里我们就可以ping qq 成功了。
root@OpenWrt:/etc/config# ping qq.com
PING qq.com (61.129.7.47): 56 data bytes
64 bytes from 61.129.7.47: seq=0 ttl=128 time=29.376 ms
^C
--- qq.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 29.376/29.376/29.376 ms
3.4 配置dhcp
路由器需要运行dhcp服务,给连接在路由器上的主机(下行接口)自动分配ip地址。基本配置如下:
root@OpenWrt:/etc/config# cat dhcp
config dnsmasq
option domainneeded '1'
option boguspriv '1'
option filterwin2k '0'
option localise_queries '1'
option rebind_protection '1'
option rebind_localhost '1'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option nonegcache '0'
option authoritative '1'
option readethers '1'
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.auto'
option nonwildcard '1'
option localservice '1'
config dhcp 'dhcp_lan1'
option interface 'lan1_yp'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv6 'server'
option ra 'server'
option ra_management '1'
config dhcp 'dhcp_lan2'
option interface 'lan2_yp'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv6 'server'
option ra 'server'
option ra_management '1'
config dhcp 'dhcp_wan'
option interface 'wan_yp'
option ignore '1'
config odhcpd 'odhcpd'
option maindhcp '0'
option leasefile '/tmp/hosts/odhcpd'
option leasetrigger '/usr/sbin/odhcpd-update'
option loglevel '4'
我们可以看到我们的逻辑接口lan!_yp,lan2_yp,wan_yp。其他选项可以参考https://oldwiki.archive.openwrt.org/doc/uci/dhcp。
3.5 防火墙配置(转发配置)
在/etc/config/firewall 配置1:
root@OpenWrt:/etc/config# cat firewall
config defaults
option input ACCEPT
option output ACCEPT
option forward ACCEPT
option syn_flood true
option disable_ipv6 true
config zone
option name 'zone_lan1'
list network 'lan1_yp'
option input ACCEPT
option forward REJECT
option output ACCEPT
option masq false
option mtu_fix true
config zone
option name 'zone_wan'
list network 'wan_yp'
option input ACCEPT
option forward REJECT
option output ACCEPT
option masq true
option mtu_fix true
#config forwarding
# option src 'zone_lan1'
# option dest 'zone#_wan'
# option family 'any'
配置1,已经可以让pc-001 ping 通qq了。不过默认接收所有转发不太好,一般都是默认设置拒绝的。配置2如下:
在/etc/config/firewall 配置2,具体参数可参考
https://openwrt.org/zh-cn/doc/uci/firewall
root@OpenWrt:/etc/config# cat firewall
config defaults
option input REJECT
option output REJECT
option forward REJECT
option syn_flood true
option disable_ipv6 true
config zone
option name 'zone_lan1'
list network 'lan1_yp'
option input ACCEPT
option forward REJECT
option output ACCEPT
option masq false
option mtu_fix true
config zone
option name 'zone_wan'
list network 'wan_yp'
option input ACCEPT
option forward REJECT
option output ACCEPT
option masq true
option mtu_fix true
config forwarding
option src 'zone_lan1'
option dest 'zone_wan'
option family 'any'
四、配置pc-001
4.1 删除配置
将原来的/etc/config/network的内容全部删掉。/etc/init.d/network restart,然后ifconfig查看一下,发现空空如也。
4.2 基本配置
root@OpenWrt:/etc/config# cat network
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'wan'
option proto 'dhcp'
option ifname 'eth0'
配置后,重启网络/etc/init.d/network restart,发现没能通过dhcp从router-001获取到ip。那么我们应该去检测route-001的dhcp。正常情况下是可以获得ip。
root@OpenWrt:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:99:44:BB:23
inet addr:192.168.33.121 Bcast:192.168.33.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe04:fb23/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7061 errors:0 dropped:0 overruns:0 frame:0
TX packets:6061 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:795731 (777.0 KiB) TX bytes:790382 (771.8 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1411 errors:0 dropped:0 overruns:0 frame:0
TX packets:1411 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:205825 (201.0 KiB) TX bytes:205825 (201.0 KiB)
这样就能ping通qq了。可以反复修改/etc/config/firewall 来测试参数的作用。