OpenWrt是三大主流路由器固件之一爬舰,應用非常廣泛低矮。本文對OpenWrt的使用方法進行簡明總結(jié)酬核,方便初學者入門鲸郊。
0. 參考
1. 概述
OpenWrt是三大主流路由器固件之一,本質(zhì)上是是一個高度模塊化溅蛉、高度自動化的嵌入式Linux系統(tǒng)公浪,擁有強大的網(wǎng)絡組件和擴展性他宛,常常被用于工控設(shè)備、電話欠气、小型機器人厅各、智能家居、路由器以及VOIP設(shè)備中预柒。同時队塘,OpenWrt還提供了100
多個已編譯好的軟件,而且數(shù)量還在不斷增加宜鸯,而 OpenWrt SDK更進一步簡化了開發(fā)軟件的工序憔古。
OpenWrt不同于其他許多用于路由器的發(fā)行版,它是一個從零開始編寫的淋袖、功能齊全的鸿市、容易修改的路由器操作系統(tǒng),從而可以添加需要的功能而不引入無用模塊即碗,同時支持這些功能工作的Linux
內(nèi)核又遠比絕大多數(shù)發(fā)行版更新灸芳。其架構(gòu)如下所示:
OpenWrt支持各種處理器架構(gòu),無論是對ARM拜姿,X86,PowerPC或者MIPS都有很好的支持冯遂。OpenWrt支持多達3000
多種軟件包蕊肥,囊括從工具鏈,到內(nèi)核蛤肌,到軟件包壁却,再到根文件系統(tǒng)等整個體系。用戶只需簡單的一個make命令即可方便快速地定制一個具有特定功能的嵌入式系統(tǒng)來作為路由器固件裸准。
OpenWrt支持常見路由協(xié)議展东,包括RIP、OSPF炒俱、OLSR盐肃、BATMAN等,適用于從小型網(wǎng)絡权悟、大型密集網(wǎng)絡到無線Ad-hoc網(wǎng)絡等各種場景砸王。
OpenWrt支持DMZ(隔離區(qū))、VLAN(虛擬局域網(wǎng))峦阁、虛擬服務器(端口映射)谦铃、訪問控制列表(ACL)、NAT(網(wǎng)絡地址轉(zhuǎn)換)等常用功能模塊以及支持如下功能的防火墻:
- 全狀態(tài)包檢測(SPI)榔昔;
- 防范常見拒絕服務(DoS)攻擊驹闰;
- 過濾多播/Ping 探測包瘪菌;
- 日志記錄和報表統(tǒng)計;
- 網(wǎng)絡攻擊檢測嘹朗。
2. 固件編譯和更新
2.1 固件編譯
OpenWrt最新源碼可以通過git工具從OpenWrt GitHub倉庫下載:
```bash
$ git clone https://github.com/openwrt/openwrt.git
```
OpenWrt編譯建議使用最新的穩(wěn)定版本(不帶rcX字樣的tag):
```bash
openwrt$ git tag -l
reboot
v17.01.0
v17.01.0-rc1
v17.01.0-rc2
v17.01.1
...
openwrt$ git checkout vX.X.X -b dev
```
OpenWrt源碼中包含基于BuildRoot的構(gòu)建系統(tǒng)师妙,具體用法可以參考Documentation/Developer guide/Toolchain/Build system usage。
OpenWrt可以通過make menuconfig
進行配置骡显,核心選項包括:
- Target System (Atheros AR7xxx/AR9xxx):處理器平臺選擇
- Target Profile (Qualcomm Atheros AP147-010 reference board):參考板選擇
- LuCI -> 1. Collections -> luci:使能LuCI Web配置界面疆栏;
- LuCI -> 2. Modules > Translations -> Chinese (zh-cn):使能中文配置界面
- LuCI > 4. Themes:選擇LuCI Web配置界面主題
- Network -> Routing and Redirection -> igmpproxy:IGMP代理支持
- Network -> Routing and Redirection -> quagga:RIP和OSPF支持,需要使能ripd和ospfd惫谤;vtysh用于在串口shell中統(tǒng)一配置RIP和OSPF壁顶,屬于可選項,未選中時可以使用telnet分別連接2602和2604端口配置RIP和OSPF溜歪;
- Network -> wpa-supplicant:編譯wpa-supplicant包若专,用以支持無線密碼,需要在LuCI配置界面->系統(tǒng)->軟件包界面手動安裝蝴猪。
2.2 固件更新
固件更新方式可以使用串口終端和網(wǎng)頁配置界面2種方式:
-
串口終端方式
路由器串口一般為標準TTL接口调衰,可以通過USB轉(zhuǎn)TTL模塊連接到電腦上,默認波特率一般為115200:連接串口并在U-Boot啟動時按任意鍵中斷固件加載自阱;
連接任一路由器網(wǎng)口到PC網(wǎng)口嚎莉;
-
在
shell
中輸入httpd
以啟動http服務器,并顯示路由器IP:u-boot> httpd enet0 port4 up HTTP server is starting at IP: 10.10.18.1 HTTP server is ready!
手工配置PC的IP地址為路由器IP的同一網(wǎng)段沛豌;
使用PC瀏覽器訪問路由器IP以下載固件趋箩。
注意:
- 映像下載完成后用戶密碼為空,需要重新設(shè)置加派;
- 如果瀏覽器自動跳轉(zhuǎn)到LuCI叫确,則需要更換瀏覽器或者清除瀏覽器cache(緩存);
- U-Boot復位命令為
reset
芍锦。
-
網(wǎng)頁配置界面方式
路由器默認IP為192.168.1.1
竹勉,網(wǎng)頁配置界面->系統(tǒng)->備份/升級界面中包含固件刷新,可以用于下載固件娄琉;注意:- 電腦IP地址采用自動配置方式次乓;
- 連接路由器IP即網(wǎng)關(guān)地址,默認密碼為空孽水;
- 依次進入LuCI配置界面->系統(tǒng)->備份/升級界面檬输;
- 使用固件刷新方式更新固件。
注意:固件更新完成后用戶配置仍然保留匈棘。
3. 路由器配置
路由器可以通用過如下兩種方式進行配置:
- 終端命令行配置方式:
- 可以使用串口或者
telnet
連接到路由器終端; - 命令行配置時可以采用UCI命令或者
vi <配置文件>
方式丧慈;
- 可以使用串口或者
- Web界面配置方式:使用PC瀏覽器連接路由器IP即網(wǎng)關(guān)地址即可。
注意:默認密碼為空,可以在終端中使用passwd
命令修改或者在網(wǎng)頁配置界面->系統(tǒng)->備份/升級界面中設(shè)置逃默。
3.1 VLAN配置
VLAN協(xié)議即虛擬局域網(wǎng)鹃愤, 通過在報文頭增加VLAN標簽,將網(wǎng)絡設(shè)備被化分為若干個虛擬的局域網(wǎng)組完域。OpenWrt支持IEEE 802.1Q
和IEEE 802.1ad VLAN
標準软吐,通過UCI配置接口(/etc/config/network
)和LuCILuci配置界面的交換機頁面將路由器中的嵌入式交換機劃分為多個VLAN,并在系統(tǒng)中顯示為獨立的接口吟税。
假定路由器有1個wan口(編號0)和4個LAN口(編號1凹耙,2,3肠仪,4)肖抱,使用如下方法將4個LAN口劃分為2個VLAN(1和2)。
3.1.1 UCI命令行配置
連接路由器終端异旧;
-
劃分VLAN:
OpenWrt# uci set network.@switch_vlan[0].ports='0t 1 2' OpenWrt# uci add network switch_vlan OpenWrt# uci set network.@switch_vlan[1].device='eth1' OpenWrt# uci set network.@switch_vlan[1].vlan='2' OpenWrt# uci set network.@switch_vlan[1].vid='2' OpenWrt# uci set network.@switch_vlan[1].ports='0t 3 4'
-
創(chuàng)建新的LAN接口
lan2
:OpenWrt# uci set network.lan2=interface OpenWrt# uci set network.lan2.ifname='eth1.2' OpenWrt# uci set network.lan2.proto='static' OpenWrt# uci set network.lan2.ipaddr='192.168.3.1' OpenWrt# uci set network.lan2.netmask='255.255.255.0'
-
將默認LAN接口
lan
切換到VLAN1上:OpenWrt# uci set network.lan.ifname='eth1.1'
-
在
lan2
上使能DHCP服務:OpenWrt# uci set dhcp.lan2=dhcp OpenWrt# uci set dhcp.lan2.interface='lan2' OpenWrt# uci set dhcp.lan2.start='100' OpenWrt# uci set dhcp.lan2.limit='150' OpenWrt# uci set dhcp.lan2.leasetime='12h'
-
將
lan2
加入防火墻的lan
區(qū)域:OpenWrt# uci set firewall.@zone[0].network='lan lan2'
-
提交修改并復位路由器:
OpenWrt# uci commit OpenWrt# reboot
3.1.2 配置文件配置
連接路由器終端意述;
-
使用
vi etc/config/network
命令修改etc/config/network
,劃分VLAN吮蛹,切換lan
接口到VLAN1上荤崇,并創(chuàng)建新的LAN接口lan2
:... config interface 'lan' ... option ifname 'eth1.1' # 'eth1' ... ... config switch_vlan ... option vid '1' option ports '0t 1 2' config switch_vlan option device 'eth1' option vlan '2' option vid '2' option ports '0t 3 4' config interface 'lan2' option ifname 'eth1.2' option proto 'static' option ipaddr '192.168.3.1' option netmask '255.255.255.0'
-
使用
vi etc/config/dhcp
命令在etc/config/dhcp
末尾增加LAN2的DHCP配置:config dhcp 'lan2' option start '100' option limit '150' option interface 'lan2' option leasetime '12h'
-
使用
vi etc/config/firewall
修改etc/config/firewall
,將lan2
加入防火墻的lan
區(qū)域:config zone option name 'lan' option network 'lan lan2' ...
-
復位路由器:
OpenWrt# reboot
3.1.3 網(wǎng)頁界面配置
- 使用PC瀏覽器連接路由器地址即網(wǎng)關(guān)地址潮针;
- 進入
網(wǎng)絡->交換機
頁面术荤,點擊添加
按鈕添加VLAN2,修改VLAN1配置每篷,并點擊保存并應用
按鈕: - 進入
網(wǎng)絡->接口
頁面瓣戚,點擊添加新接口
按鈕添加lan2
,對應于VLAN2接口eth1.2
雳攘,并點擊提交
按鈕: - 在刷新出來的新頁面中點擊
DHCP設(shè)置
按鈕,設(shè)置lan2
的IPv4地址和網(wǎng)關(guān)枫笛; - 在刷新出來的新頁面中點擊
防火墻設(shè)置
標簽吨灭,將lan2
加入防火墻的lan
區(qū)域,并點擊保存并應用
按鈕: - 點擊
LAN
標簽設(shè)置lan
接口刑巧,點擊物理設(shè)置
按鈕喧兄,切換lan
接口到VLAN1接口eth1.1
,并點擊保存并應用
按鈕:
注意:點擊保存并應用
按鈕時若界面卡住不再刷新啊楚,則將PC網(wǎng)口更換到路由器另外一組VLAN對應的LAN口吠冤。
3.2 路由配置
IP路由是路由器最重要的功能。路由是在網(wǎng)絡中選擇要發(fā)送網(wǎng)絡流量的路徑的過程恭理。報文根據(jù)路由表來進行路由拯辙。路由可以靜態(tài)配置,也可以使用路由協(xié)議進行自動化的動態(tài)配置以減少靜態(tài)配置工作。
路由表中的路由項涯保,根據(jù)目的地址不同可以劃分為單播路由和多播路由诉濒;根據(jù)來源不同可以劃分為設(shè)置接口IP地址和掩碼時自動增加的直連路由、網(wǎng)絡管理員手工配置的靜態(tài)路由和路由協(xié)議動態(tài)生成的動態(tài)路由夕春。
路由狀態(tài)可以通過LuCI配置界面路由表狀態(tài)頁面查看未荒。
為了方便說明,之后的配置以如下場景為例:
其中:
- 被測路由器WAN口IP地址為
192.168.0.100
及志,對應網(wǎng)口設(shè)備為eth1
片排,LAN口IP地址為192.168.1.X
; - 鄰居路由器WAN口IP地址為
192.168.0.200
速侈,對應網(wǎng)口設(shè)備為eth1
率寡,LAN口IP地址為192.168.2.X
。
3.2.1 靜態(tài)路由
靜態(tài)路由锌畸,是網(wǎng)絡管理員通過route
勇劣、ip route
等Linux
路由配置命令手工配置的路由,適用于拓撲簡單并且穩(wěn)定的小型網(wǎng)絡潭枣。
靜態(tài)路由不能自動適應網(wǎng)絡拓撲結(jié)構(gòu)的變化比默,因此當網(wǎng)絡發(fā)生故障或網(wǎng)絡拓撲發(fā)生變化時,必須再次由網(wǎng)絡管理員手工修改配置盆犁。
除了route
命咐、ip route
等Linux
路由配置命令,OpenWrt同時通過LuCI配置界面提供web方式的靜態(tài)路由查看和配置命令谐岁,即狀態(tài)界面的路由表頁面和網(wǎng)絡界面的靜態(tài)路由頁面醋奠。
配置方法如下所示:
-
被測路由器:連接終端或者進入LuCI配置界面的靜態(tài)路由頁面,增加WAN口路由規(guī)則伊佃,將鄰居路由器LAN側(cè)IP地址路由到鄰居路由器的WAN口IP地址窜司,并關(guān)閉防火墻:
OpenWrt# route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.0.200 dev eth1 OpenWrt# /etc/init.d/firewall stop
2.鄰居路由器:連接終端或者進入LuCI配置界面的靜態(tài)路由頁面,增加WAN口路由規(guī)則航揉,將被測路由器LAN側(cè)IP地址路由到被測路由器的WAN口IP地址塞祈,并關(guān)閉防火墻:
OpenWrt# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.100 dev eth1
OpenWrt# /etc/init.d/firewall stop
注意:
可以通過LuCI配置界面的靜態(tài)路由器頁面增加靜態(tài)路由配置帅涂,但是無效的路由表項即使保存成功也不會生效议薪,無法在路由表狀態(tài)頁面看到;在終端中使用
route
命令添加無效路由時會提示錯誤信息媳友;-
需要關(guān)閉防火墻或者修改
etc/config/firewall
接受轉(zhuǎn)發(fā)包和ping包:config defaults ... option forward ACCEPT # REJECT ... config zone ... option forward ACCEPT # REJECT # option masq 1 option mtu_fix 1 ... # Allow IPv4 ping config rule ... # option icmp_type echo-request ...
3.2.2 動態(tài)路由
OpenWrt通過Routing套件中的Quagga軟路由提供RIP斯议、OSPF等動態(tài)協(xié)議路由協(xié)議。
Quagga是一個路由軟件包醇锚,用于為基于TCP / IP的路由服務提供路由協(xié)議支持哼御,包括RIPv1,RIPv2,RIPng艇搀,OSPFv2尿扯,OSPFv3,IS-IS焰雕,BGP-4和BGP-4 +等衷笋。Quagga還支持特殊的BGP路由反射器和路由服務器行為。除了傳統(tǒng)的IPv4路由協(xié)議矩屁,Quagga還支持IPv6路由協(xié)議辟宗。通過支持SMUX和AgentX協(xié)議的SNMP守護程序,Quagga提供了路由協(xié)議MIB吝秕。
Quagga體系結(jié)構(gòu)由核心守護程序zebra和一系列協(xié)議守護程序組成泊脐,用以共同構(gòu)建路由表。每個主要協(xié)議都在其自己的守護程序中實現(xiàn)烁峭,并與核心守護程序(zebra)通信以將路由更新傳遞給zebra容客;zebra守護程序充當基礎(chǔ)Unix內(nèi)核的抽象層,并通過Unix或TCP流向Quagga客戶端提供Zserv API约郁。
Quagga在網(wǎng)絡協(xié)議棧中的作用是與其他路由器交換路由信息缩挑,制定路由和策略決策,并將路由決策安裝到Linux內(nèi)核中鬓梅,從而允許Linux協(xié)議棧做出相應的轉(zhuǎn)發(fā)決策供置。
Quagga通過集成用戶界面外殼程序 vtysh來管理所有守護程序。vtysh通過UNIX域套接字連接到每個守護程序绽快,然后充當用戶輸入的代理芥丧。除了統(tǒng)一的前端,vtysh還提供了通過集成配置模式使用單個配置文件來配置所有守護程序的功能坊罢,從而避免了為每個守護程序維護單獨的配置文件的開銷续担。
3.2.2.1 RIP
Quagga路由套件的ripd
支持RFC2453
中描述的RIPv2
和RFC1058
中描述的RIPv1
。
RIP(Routing Information Protocol活孩,路由信息協(xié)議)定義了路由器在互連的一組局域網(wǎng)(LAN)之間移動流量時應如何共享信息物遇,應用較早(最早出現(xiàn)于1981年的Xerox網(wǎng)絡系統(tǒng)(XNS)協(xié)議套件中)帘不、使用較普遍的內(nèi)部網(wǎng)關(guān)協(xié)議(Interior Gateway Protocol亭珍,IGP),適用于小型同類網(wǎng)絡的一個自治系統(tǒng)(AS)內(nèi)的路由信息的傳遞。
RIP是一個用于路由器和主機間交換路由信息的距離向量協(xié)議航夺,使用跳數(shù),即metric
來衡量到達目標地址的路由距離崔涂。
RIP使用距離矢量算法(Bellman-Ford算法)來決定將數(shù)據(jù)包放在哪個路徑上以到達其目的地阳掐。每個RIP路由器維護一個路由表,每30秒向其最近的鄰居廣播其整個路由表。如果路由器在路由上收到更新缭保,并且新路徑更短汛闸,它將使用較短路徑的長度和下一跳地址更新其表條目。如果新路徑較長艺骂,它將等待一個抑制時間诸老,以查看以后的更新是否也反映了較高的值。僅當確定新的較長路徑穩(wěn)定時钳恕,才會更新表條目别伏。如果路由器崩潰或網(wǎng)絡連接斷開,則網(wǎng)絡會發(fā)現(xiàn)這一點忧额,因為該路由器停止向其鄰居發(fā)送更新厘肮,或者停止沿斷開的連接發(fā)送和接收更新。如果路由表中的給定路由沒有在6個連續(xù)的更新周期(即180秒)內(nèi)更新睦番,則RIP路由器將丟棄該路由类茂,并通過其自身的定期更新讓網(wǎng)絡的其余部分了解問題。
目前托嚣,OSPF已在很大程度上取代了RIP巩检,成為最廣泛使用的內(nèi)部網(wǎng)關(guān)協(xié)議(IGP)。RIP已被取代主要是因為它的簡單性以及無法擴展到非常大和復雜的網(wǎng)絡注益。
配置方法如下所示:
-
在被測路由器終端中執(zhí)行如下命令:
OpenWrt# vi /etc/quagga/ripd.conf
-
將如下內(nèi)容粘貼到
ripd.conf
中保存退出:# password for telnet connection password zebra # enable RIP router rip # set RIP enable interface by network network 192.168.0.0/24 network 192.168.1.0/24 # enable log and debug log file /etc/quagga/ripd.log debug rip events debug rip packet
在鄰居路由器*終端中執(zhí)行同樣步驟碴巾,注意將
network 192.168.1.0/24
改為network 192.168.2.0/24
;重啟路由器或執(zhí)行
/etc/init.d/quagga restart
重啟quagga
服務丑搔;在路由器終端中首先使用
/etc/init.d/firewall stop
關(guān)閉防火墻厦瓢,然后使用route
命令查詢動態(tài)路由是否已經(jīng)出現(xiàn);在路由器終端中使用
vtysh
進入配置終端后輸入然后使用show ip rip status
查看RIP信息啤月。
注意:
參考Quagga 配置筆記煮仇;
通過
vtysh
配置時需要先使用configure terminal
進入配置終端后再輸入配置文本中的命令,具體步驟參考Quagga簡介谎仲、安裝浙垫、配置說明;測試時也可以通過
/etc/quagga/ripd.log
和/etc/quagga/ospfd.log
查看日志和調(diào)試信息郑诺;日志和調(diào)試信息在正式版本中可以關(guān)掉夹姥,節(jié)省空間;
-
測試時需要關(guān)閉防火墻辙诞,或者修改
etc/config/firewall
添加如下防火墻規(guī)則辙售,否則無法收到RIP/OSPF報文:config rule option name 'Allow-RIP' option src 'wan' option src_ip '192.168.0.0/24' option src_port 520 option proto 'udp' option target 'ACCEPT' config rule option name 'Allow-OSPF' option src 'wan' option src_ip '192.168.0.0/24' option proto 'ospf' option target 'ACCEPT'
3.2.2.2 OSPF
Quagga路由套件的ospfd
支持RFC 2328
定義的適用于IPv4網(wǎng)絡的OSPFv2
。
OSPF(Open Shortest Path First飞涂,開放式最短路徑優(yōu)先)是內(nèi)部網(wǎng)關(guān)協(xié)議(IGP)系列中最著名的協(xié)議旦部,由IETF的OSPF工作組在19世紀80年代中期開發(fā)祈搜。OSPF具有路由變化收斂速度快、路由更新效率高士八、無路由環(huán)路容燕、支持變長子網(wǎng)掩碼(VLSM)和匯總、層次區(qū)域劃分等優(yōu)點婚度。OSPF通過鄰居關(guān)系維護路由蘸秘,避免定期更新對帶寬進行的消耗,適用于大中型網(wǎng)絡蝗茁。在網(wǎng)絡中使用OSPF協(xié)議后秘血,大部分路由將由OSPF協(xié)議自行計算和生成,無須網(wǎng)絡管理員人工配置评甜,當網(wǎng)絡拓撲發(fā)生變化時灰粮,協(xié)議可以自動計算、更正路由忍坷,極大地方便了網(wǎng)絡管理粘舟。
在網(wǎng)絡中配置后,OSPF將偵聽鄰居并收集所有可用的鏈路狀態(tài)數(shù)據(jù)佩研,以構(gòu)建其網(wǎng)絡中所有可用路徑的拓撲圖柑肴,然后將信息保存在其拓撲數(shù)據(jù)庫(也稱為鏈路狀態(tài)數(shù)據(jù)庫(LSDB))中。根據(jù)收集到的信息旬薯,它將使用計算機科學家Edsger W. Dijkstra在1956年開發(fā)的稱為最短路徑優(yōu)先(SFP)的算法晰骑,計算到達每個可訪問子網(wǎng)/網(wǎng)絡的最佳最短路徑。大部分路由將由OSPF協(xié)議自行計算和生成绊序,無須網(wǎng)絡管理員人工配置硕舆,當網(wǎng)絡拓撲發(fā)生變化時,協(xié)議可以自動計算骤公、更正路由抚官,極大地方便了網(wǎng)絡管理。
OSPF將自治系統(tǒng)內(nèi)的路由器劃分為路由區(qū)域阶捆,每個區(qū)域都由一組連接的路由器組成凌节,從而簡化管理并優(yōu)化可用資源,并在此基礎(chǔ)上進行路由計算洒试。
與RIP協(xié)議相比倍奢,OSPF使用基于帶寬的度量值,選路更加科學垒棋。當路由條目更新時卒煞,僅發(fā)送更新路由(RIP發(fā)送整個路由表),減小了線路帶寬的消耗捕犬,收斂速度快跷坝。
配置方法如下所示:
-
在被測路由器串口shell中執(zhí)行如下命令:
OpenWrt# vi /etc/quagga/ospfd.conf
-
將如下內(nèi)容粘貼到
ospfd.conf
中保存退出:# password for telnet connection password zebra # enable OSPF router ospf # set OSPF enable interface by network ospf router-id 192.168.1.0 network 192.168.0.0/24 area 0.0.0.0 network 192.168.1.0/24 area 0.0.0.1 # enable log and debug log file /etc/quagga/ospfd.log debug ospf event debug ospf packet all
在鄰居路由器終端中執(zhí)行同樣步驟,注意將
network 192.168.1.0/24 area 0.0.0.1
改為network 192.168.2.0/24 area 0.0.0.1
并將router-id
更改為192.168.2.0
碉碉;重啟路由器或執(zhí)行
/etc/init.d/quagga restart
重啟quagga
服務柴钻;在路由器終端中使用
/etc/init.d/firewall stop
關(guān)閉防火墻,然后使用route
命令查詢動態(tài)路由是否已經(jīng)出現(xiàn);在路由器終端中使用
vtysh
進入配置終端后輸入然后使用show ip ospf database
查看路由數(shù)據(jù)庫垢粮。
注意事項參見3.2.2 RIP贴届。
3.2.3 多播路由
多播方式使得服務器可以將一個報文發(fā)送到多播地址,然后通過路由器的多播路由支持蜡吧,使得多播組內(nèi)的每個報文都可以接收到服務器發(fā)送的報文毫蚓。多播數(shù)據(jù)在傳輸層封裝為UDP報文,發(fā)送到224.0.0.0 ~ 239.255.255.255
范圍內(nèi)的D類IP地址和對應的以01-00-5E
開頭的MAC地址昔善。
實現(xiàn)多播路由的關(guān)鍵在于建立多播路由表元潘。多播路由表的創(chuàng)建包括3種方式,即靜態(tài)路由君仆、PIM
和IGMP
代理翩概。其中,IGMP(互聯(lián)網(wǎng)組管理協(xié)議)是一個由主機和路由器之間使用的IPv4相鄰網(wǎng)絡建立多播返咱,并維護多播組成員關(guān)系的通信協(xié)議钥庇。IGMP代理通過攔截路由器LAN側(cè)主機發(fā)送的IGMP報文,代理LAN側(cè)主機來發(fā)送IGMP報文和維護多播組成員關(guān)系咖摹,并加入上游多播組评姨,即在WAN端口執(zhí)行主機的角色,LAN端口執(zhí)行路由器的角色萤晴。
OpenWrt通過自帶的網(wǎng)絡服務包igmpproxy
支持IGMP代理吐句,并IGMP使用UCI配置接口(etc/config/igmpproxy
)作為管理接口,可以通過Linux命令ip mroute
查看多播路由店读。
配置方法如下所示:
1.在被測路由器終端上修改/etc/config/igmpproxy
中的upstream
端口監(jiān)聽地址范圍(外網(wǎng)PC地址范圍)并關(guān)閉loopback
端口監(jiān)聽:
```
config phyint
...
option direction upstream
list altnet 192.168.0.0/24
```
2.重啟被測路由器蕴侧,并在被測路由器終端上使用ps | grep igmp
確認存在igmpproxy
進程,如果沒有則需要確認igmpproxy
文件配置是否正確两入;
3.在模擬內(nèi)網(wǎng)PC上啟動VLC?media?player净宵,輸入地址udp://@239.1.1.1:8028
,點擊播放裹纳;
4.在模擬外網(wǎng)PC上啟動PixStream?WinSend择葡,點擊open
選擇需要發(fā)送的的*.ts
格式的流媒體文件,剃氧,其他參數(shù)均為默認敏储,點擊發(fā)送。
注意:
-
/var/etc/igmpproxy.conf
由igmpproxy
根據(jù)/etc/config/igmpproxy
自動生成已添;如果igmpproxy
代理進程沒有起來妥箕,需要確認內(nèi)容是否如下所示,否則需要重啟路由器:quickleave phyint eth1 upstream ratelimit 0 threshold 1 altnet 192.168.0.0/16 phyint br-lan downstream ratelimit 0 threshold 1
IGMP代理測試詳細步驟參見IGMP Proxy測試更舞。
3.3 防火墻
防火墻是指一種將內(nèi)部網(wǎng)和公眾訪問網(wǎng)(如Internet)分開的方法畦幢,實際上是一種建立在現(xiàn)代通信網(wǎng)絡技術(shù)和信息安全技術(shù)基礎(chǔ)上的應用性安全技術(shù)和隔離技術(shù)。
OpenWrt基于Linux內(nèi)核netfilter/iptable
框架封裝了網(wǎng)絡防火墻組件firewall3
缆蝉,并進而通過LuCI配置界面提供web配置功能宇葱。
firewall3
在用戶空間中運行,用以將配置文件解析為一組iptables規(guī)則刊头,并將每個規(guī)則發(fā)送到內(nèi)核netfilter
模塊黍瞧。OpenWRT使用firewall3
應用程序安全構(gòu)建規(guī)則集,同時隱藏許多細節(jié)原杂。
iptables
是內(nèi)核netfilter
模塊的用戶空間代理印颤,通過將報文過濾規(guī)則劃分為負責過濾和防火墻功能的filter表、負責NAT(網(wǎng)絡地址轉(zhuǎn)化)功能的nat表穿肄、負責拆解/封裝/重封裝報文的mangel表以及關(guān)閉nat表上其中的連接追蹤機制的raw表膀哲。
內(nèi)核netfilter
模塊在prerouting
、input
被碗、forward
某宪、output
和postrouting
等報文經(jīng)過的5個階段使用firewall3
創(chuàng)建的iptables
規(guī)則提供各種防火墻功能。
OpenWrt防火墻提供iptables命令锐朴、UCI配置接口(etc/config/firewall
)和Luci配置界面的防火墻頁面等三種配置方式兴喂。
3.3.1 全狀態(tài)包檢測(SPI)
全狀態(tài)包檢測(SPI),是指通過對每個連接信息焚志,包括源地址衣迷、目的地址、源端口酱酬、目的端口壶谒、協(xié)議類型、TCP協(xié)議連接狀態(tài)和超時時間等進行檢測從而判斷是否丟棄數(shù)據(jù)包膳沽,并在默認情況下拒絕所有來自外網(wǎng)的請求汗菜,對通過防火墻的發(fā)自內(nèi)網(wǎng)請求的連接動態(tài)地維護所有通信的狀態(tài)(連接),只有對內(nèi)網(wǎng)請求回復的連接并符合已建立的狀態(tài)數(shù)據(jù)庫的包才能通過防火墻進入內(nèi)網(wǎng)挑社;該功能由Linux網(wǎng)絡協(xié)議棧默認提供陨界。
3.3.2 防范常見拒絕服務(DoS)攻擊
防范常見拒絕服務(DoS)攻擊,包括PingofDeath
痛阻、TearDrop
菌瘪、UDPflood
、SYNflood
阱当、LandAttack
俏扩、IPSpoofingDoS
等糜工;其中SYNflood
可以通過使能全局配置項synflood_protect
來進行防范,其余攻擊形式由Linux網(wǎng)絡協(xié)議棧默認提供保護录淡,無需配置捌木。
OpenWrt全局防火墻配置通過etc/config/firewall
來配置:
config defaults
...
option synflood_protect '1'
...
其中,可用配置項可以參考Documentation/User guide/Firewall documentation/Firewall configuration etc/config/firewall赁咙。
3.3.3 NAT(網(wǎng)絡地址轉(zhuǎn)換)
NAT是指將內(nèi)部網(wǎng)絡的私有IP地址轉(zhuǎn)換為公有IP地址,包括SNAT(源地址轉(zhuǎn)換)和DNAT(目的地址轉(zhuǎn)換)免钻;該功能可以通過創(chuàng)建SNAT和DNAT端口轉(zhuǎn)發(fā)規(guī)則來實現(xiàn)彼水,參考Documentation/User guide/Firewall documentation/Firewall configuration etc/config/firewall。
config redirect
option name 'SNAT 192.168.1.100 to WAN 192.168.0.100 for tftp'
option src 'lan'
option src_ip '192.168.1.100'
option src_dip '192.168.0.100'
option dest 'wan'
option proto 'udp'
option target 'SNAT'
config redirect
option name 'DNAT WAN 69 port to LAN 192.168.1.100:69 for tftp'
option src 'wan'
option src_dport '69'
option dest 'lan'
option dest_ip '192.168.1.100'
option dest_port '69'
option proto 'udp'
option target 'DNAT'
DMZ(隔離區(qū))和虛擬服務器(端口映射)极舔,是指將來自外網(wǎng)的所有請求或指向某個端口/協(xié)議的請求轉(zhuǎn)發(fā)到指定的內(nèi)網(wǎng)主機凤覆,從而實現(xiàn)對外服務器和虛擬服務器的功能;該功能可以通過創(chuàng)建DNAT端口轉(zhuǎn)發(fā)規(guī)則拆魏,實現(xiàn)指定協(xié)議從指定源地址/源端口到目的地址/目的端口之間的轉(zhuǎn)換盯桦,從而將指定內(nèi)網(wǎng)主機的所有或部分端口/協(xié)議開放給外網(wǎng)用戶訪問。