主流的英創(chuàng)嵌入式主板均支持雙網(wǎng)絡(luò)接口,其中支持ISA擴展總線的主板型號,如:EM335x、ESM335x、ESM6802、ESM6800V等,還可以通過ISA總線外接ETA728模塊,再擴展兩路獨立的10M/100M網(wǎng)絡(luò),從而可構(gòu)成4網(wǎng)口系統(tǒng)。多網(wǎng)絡(luò)口的英創(chuàng)主板在工業(yè)應(yīng)用中的典型應(yīng)用是作為通訊管理機,通過網(wǎng)絡(luò)將應(yīng)用數(shù)據(jù)上傳至數(shù)據(jù)中心。在實際應(yīng)用中,有些需求是將應(yīng)用數(shù)據(jù)上傳至不同的數(shù)據(jù)中心,這就需要多網(wǎng)口多路由的支持,也就是說每個網(wǎng)口有自己獨立的路由表,在英創(chuàng)Linux主板上通過相關(guān)的配置,即可實現(xiàn)上述功能,本文以ESM335x主板為例重點介紹該配置方案。
1、Linux內(nèi)核配置
為了支持多路由表功能,內(nèi)核配置中必須設(shè)置:
CONFIG_IP_MULTIPLE_TABLES=y
具體menuconfig位置如下:
Networking support --->
Networking options
[*] IP: advanced router
[*] IP: policy routing
2、利用ip route配置生成多路由表
對于多個路由表,是通過/etc/iproute2/rt_tables進行管理的,Linux系統(tǒng)最多可以支持255張路由表,其中3張是內(nèi)置的:
255 local
254 main
253 default
分別表示了路由表table的序號和名稱。在英創(chuàng)主板上對于各個網(wǎng)口的路由表定義序號從1開始,名稱就采用網(wǎng)口名稱。如:
1eth0
2eth1
3eth2
4eth3
生成路由表的步驟如下:
1、在rt_tables文件中增加一個路由表的序號和名稱:
#>echo “1 eth0” >> /etc/iproute2/rt_tables
#>echo “2 eth1” >> /etc/iproute2/rt_tables
配置好后,可以用cat命令查看rt_tables文件:
2、定義路由表規(guī)則
利用2個Linux工具ip route、ip rule來定義路由表規(guī)則,可以用來指定IP地址的數(shù)據(jù)選擇指定的路由表。
#>ip route add 192.168.202.0/24 dev eth1 src 192.168.202.175 table eth1
#>ip route add default via 192.168.202.1 dev eth1 table eth1
#>ip rule add from 192.168.202.175/32 table eth1
#>ip rule add to 192.168.202.175/32 table eth1
#>route add default gw 192.168.202.1
增加后,可以用ip route show table eth1來查看:
按照此定義的路由表規(guī)則,即所有來自“192.168.202.175”的IP數(shù)據(jù)包訪問外網(wǎng)時選擇eth1路由表,并使用該網(wǎng)段的網(wǎng)關(guān)路由。
3、自動生成多網(wǎng)絡(luò)路由表
在多網(wǎng)絡(luò)的情況下,為了方便客戶使用,我們采用網(wǎng)絡(luò)配置文件(ifcfg-eth*)和加載腳本文件(route-cfg.sh)來完成多個路由表的自動配置,免除了逐一配置的繁瑣過程。
其中 ifcfg-eth*用于配置各個網(wǎng)絡(luò)的參數(shù),一個文件對應(yīng)于一個網(wǎng)口,例如對eth0的配置文件名為ifcfg-eth0,其文件內(nèi)容如下:
DEVICE=eth0 // 網(wǎng)絡(luò)名稱
TABLENUM=1 // table 序號
NETWORK=192.168.201.0 // 網(wǎng)段IP
NETMASK=255.255.255.0 // 子網(wǎng)掩碼
ROUTER=192.168.201.1 // 本網(wǎng)口的路由網(wǎng)關(guān)IP
IPADDR=192.168.201.175 // 本網(wǎng)口IP地址
按上述方法生成好需要的若干配置文件ifcfg-eth*后,將ifcfg-eth*和route-cfg.sh均復制到/mnt/nandflash/目錄下。然后直接執(zhí)行腳本文件route-cfg.sh即可自動完成路由表配置,該文件會根據(jù)ifcfg-eth*文件中的參數(shù),自動生成所需的多網(wǎng)口多路由表
#/mnt/nandflash/>./route-cfg.sh
route-cfg.sh文件內(nèi)容如下:
#!/bin/sh
for interface_file in $(ls /mnt/nandflash/ifcfg-eth*) ;do
. ${interface_file}
prefix=$(ipcalc -p ${IPADDR} ${NETMASK} | awk -F= '{print $2}')
tablenum=${TABLENUM}
if ! grep "^${tablenum} ${DEVICE}$" /etc/iproute2/rt_tables >/dev/null ;then
echo "${tablenum} ${DEVICE}" >>/etc/iproute2/rt_tables
fi
echo ${DEVICE}: IPADDR=${IPADDR} gw=${ROUTER}
ifconfig ${DEVICE} ${IPADDR}
# flush table
ip route flush table ${DEVICE}
# add table
ip route add ${NETWORK}/${prefix} dev ${DEVICE} src ${IPADDR} table ${DEVICE}
ip route add default via ${ROUTER} dev ${DEVICE} table ${DEVICE}
ip rule add from ${IPADDR}/32 table ${DEVICE}
ip rule add to ${IPADDR}/32 table ${DEVICE}
# add default gw
route add default gw ${ROUTER}
done
4、測試網(wǎng)絡(luò)
以ESM335x為核心,搭建雙網(wǎng)口雙網(wǎng)關(guān)的多路由系統(tǒng),作為測試環(huán)境。下圖為雙網(wǎng)口網(wǎng)絡(luò)拓撲圖:
最簡單的方法就是利用ping命令進行測試,ping命令可以指定網(wǎng)口。如:
#> ping -I eth0 202.98.96.68 (指定通過eth0 訪問外網(wǎng) -> internet網(wǎng)站)
#> ping -I eth1 192.168.203.70 (指定通過eth1 訪問外網(wǎng) -> 企業(yè)數(shù)據(jù)中心)
如果利用系統(tǒng)的多路由表,也可以不用指定網(wǎng)口進行ping測試,但是系統(tǒng)有個自動選路的處理,會存在一定的延時。
#> ping 202.98.96.68
#> ping 192.168.203.70
-
Linux
+關(guān)注
關(guān)注
87文章
11335瀏覽量
210068 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6086瀏覽量
35510
發(fā)布評論請先 登錄
相關(guān)推薦
評論