實(shí)現(xiàn)648 Android 6.0端與410 Linux端通過(guò)Switch通信
1. 虛擬網(wǎng)卡配置
648中延用638中方法在有線網(wǎng)絡(luò)接口eth0上創(chuàng)建虛擬網(wǎng)卡eth0.1并設(shè)置ip 10.66.1.3用以與410地址10.66.1.2通信咳秉。
echo "busybox ifconfig eth0:1 10.66.1.3 up"
# set VLAN 1 on eth0 and set its REORDER_HDR param
busybox vconfig add eth0 1
busybox vconfig set_flag eth0.1 1 1
# set its network info
busybox ifconfig eth0.1 10.66.1.3 netmask 255.255.255.0 up
busybox ifconfig
配置結(jié)果可通過(guò)命令“ifconfig”查看:
并且配置完成后搔涝,系統(tǒng)路由表中會(huì)自動(dòng)多出一條路由:
表示10.66.1.0網(wǎng)段的ip都走eth0.1網(wǎng)卡绰寞,沒(méi)毛病舶掖。
2. Android M 多網(wǎng)絡(luò)共存
經(jīng)過(guò)步驟一的配置之后在638 Android 4.4系統(tǒng)上即可與410建立通信尸闸;但在648 Android 6.0上是不通的画舌。此問(wèn)題查詢了很長(zhǎng)時(shí)間終于有了解決方案,且聽(tīng)我細(xì)細(xì)道來(lái)介褥。
Android4.4只使用了一張路由表粘优,使用busybox route就可以完成路由表的設(shè)置,從Android5.0之后呻顽,考慮要對(duì)多網(wǎng)絡(luò)的支持,采用了多路由表丹墨。Android 5.0(LOLLIPOP)以上廊遍,在同一時(shí)間下,Android系統(tǒng)可以允許多網(wǎng)絡(luò)類型連接贩挣,而且并不是簡(jiǎn)單的網(wǎng)絡(luò)共存喉前,而是每個(gè)網(wǎng)絡(luò)有一套自己的dns,網(wǎng)關(guān)王财,路由表卵迂。比如eth0,wlan0分別有自己獨(dú)立的一套绒净。應(yīng)用層在建立socket連接的時(shí)候见咒,可以自由選擇使用那套網(wǎng)絡(luò);在這樣子的前提下挂疆,你就可以選擇究竟采用那種網(wǎng)絡(luò)來(lái)完成你的請(qǐng)求改览。這里還涉及到另一個(gè)新的概念不同網(wǎng)絡(luò)的標(biāo)識(shí)netid下翎,應(yīng)用層可通過(guò)綁定指定的netid來(lái)設(shè)置該應(yīng)用走指定的網(wǎng)絡(luò),但此處暫不贅述有興趣可自己了解宝当。在Android 5.0(LOLLIPOP)之前视事,在同一時(shí)間下,Android系統(tǒng)只能允許一種網(wǎng)絡(luò)類型連接庆揩。之后在多網(wǎng)絡(luò)的情況下俐东,系統(tǒng)是如何選擇的呢?這就需要引入一個(gè)關(guān)鍵名詞“策略路由”订晌。
策略路由在linux中已經(jīng)存在很久虏辫,但是Android5.0開(kāi)始才真正將其作用發(fā)揮出來(lái)。策略路由區(qū)別于一般的路由就在于腾仅,一般的路由是以目的地址作為識(shí)別與區(qū)分的標(biāo)識(shí)乒裆,例如下面這個(gè)路由表,它表示所有目的地址為192.168.7.0/24的數(shù)據(jù)包都直接從eth0發(fā)出
root@almond:/ # ip rule list
0: from all lookup local
10000: from all fwmark 0xc0000/0xd0000 lookup legacy_system
10500: from all oif eth0 uidrange 0-0 lookup eth0
13000: from all fwmark 0x10063/0x1ffff lookup local_network
13000: from all fwmark 0x10064/0x1ffff lookup eth0
14000: from all oif eth0 lookup eth0
15000: from all fwmark 0x0/0x10000 lookup legacy_system
16000: from all fwmark 0x0/0x10000 lookup legacy_network
17000: from all fwmark 0x0/0x10000 lookup local_network
19000: from all fwmark 0x64/0x1ffff lookup eth0
22000: from all fwmark 0x0/0xffff lookup eth0
23000: from all fwmark 0x0/0xffff uidrange 0-0 lookup main
32000: from all unreachable
root@almond:/ #
當(dāng)面對(duì)比較復(fù)雜的情況時(shí)推励,這種基于目的地址的路由鹤耍,就很受局限。例如:有兩個(gè)網(wǎng)卡eth0, eth1验辞,希望所有http上網(wǎng)數(shù)據(jù)從eth0出去稿黄,F(xiàn)TP數(shù)據(jù)從eth1出去。這種情況就必須要策略路由才能處理跌造。
策略路由的基本命令:
ip rule list:顯示策略數(shù)據(jù)庫(kù)
ip rule add :增加策略規(guī)則
ip route add:增加路由表
648上策略路由信息:
# add route policy
busybox ip route add table 3 via 10.66.1.3 dev eth0.1
busybox ip rule add to 10.66.1.2/24 table 3
各部分解釋
xx: 第一列數(shù)字是優(yōu)先級(jí)杆怕,小的數(shù)字優(yōu)先級(jí)高
中間部分內(nèi)容:如 from all, 這是規(guī)則
fwmark 0x10064: 其中0x64(十進(jìn)制為100)就是該網(wǎng)絡(luò)的netid
lookup [xxx] : 表示搜索xxx路由表壳贪,1-252之間的數(shù)字或名稱
整行的意思就是陵珍,如果一個(gè)數(shù)據(jù)包符合規(guī)則(源地址、目的地址违施、協(xié)議互纯、端口、數(shù)據(jù)包大小磕蒲、內(nèi)容等)留潦,則使用指定路由表。
系統(tǒng)最多支持255個(gè)路由表:
規(guī)則0辣往,它是優(yōu)先級(jí)別最高的規(guī)則兔院,規(guī)則規(guī)定,所有的包站削,都必須首先使用local表(254)進(jìn)行路由坊萝。本規(guī)則不能被更改和刪除。
規(guī)則23000,規(guī)定所有的包屹堰,使用表main進(jìn)行路由肛冶。本規(guī)則可以被更改和刪除。
規(guī)則32000扯键,規(guī)定所有的包睦袖,使用表default進(jìn)行路由。本規(guī)則可以被更改和刪除荣刑。
在默認(rèn)情況下進(jìn)行路由時(shí)馅笙,首先會(huì)根據(jù)規(guī)則0在本地路由表里尋找路由,如果目的地址是本網(wǎng)絡(luò)厉亏,或是廣播地址的話董习,在這里就可以找到合適的路由;從這個(gè)路由規(guī)則中可以看到爱只, 路由表 local優(yōu)先皿淋,然后是netid 對(duì)應(yīng) 0x10064 的走 eth0 路由表,對(duì)應(yīng) 0x10066 走 eth0 路由表恬试。而通常情況下訪問(wèn)網(wǎng)絡(luò)時(shí)沒(méi)有設(shè)置 netid窝趣,默認(rèn)就使用 22000: from all fwmark 0x0/0xffff lookup eth0 這個(gè),即 eth0 路由表训柴。
有了策略路由哑舒,就可以保證當(dāng)多網(wǎng)卡存在是,每個(gè)網(wǎng)卡有自己的路由表幻馁,為多網(wǎng)卡共存提供路由基礎(chǔ)洗鸵。上層應(yīng)用,可以選擇要經(jīng)過(guò)的路由仗嗦。
此處沒(méi)有走eth0.1到10.66.1.2的路由策略膘滨,需添加:
# add route policy
busybox ip route add table 3 via 10.66.1.3 dev eth0.1
busybox ip rule add to 10.66.1.2/24 table 3
3. Linux 路由與策略路由
Linux是在內(nèi)核2.1開(kāi)始采用策略性路由機(jī)制的。策略性路由機(jī)制與傳統(tǒng)的路由算法相比主要是引入了上面的多路由表以及規(guī)則的概念稀拐。
要配置一個(gè)策略路由有2步:
1吏祸、在自定義路由表中添加要走的路由 ip route add xxx table table_num
2、增加策略钩蚊,使得符合該策略的流量走第一步所定義的路由表 ip rule add 策略 【table tablenum 或 動(dòng)作】。
傳統(tǒng)的linux路由是由一張路由表去保存網(wǎng)絡(luò)鏈路上的路由信息的蹈矮。新的linux策略路由的理念是使用多張路由表去保存路由信息砰逻。何為策略路由呢,就是為不用的數(shù)據(jù)包制定不同的路由策略泛鸟,即在IP路選時(shí)走不同的路由蝠咆。
在策略路由機(jī)制中,可以支持多張路由表,最多可支持255張表刚操。其中4張是內(nèi)置路由表闸翅,如下:
表255:本地路由表(localtable)。廣播地址和NAT地址都在這個(gè)表里菊霜。該表由系統(tǒng)自動(dòng)維護(hù)坚冀,網(wǎng)絡(luò)管理員不能直接修改。
表254:主路由表(maintable)鉴逞。如果沒(méi)有指明路由所屬的表记某,所有的路由都會(huì)添加到這個(gè)表里。
表253:(defaulttable)构捡。一般所有的默認(rèn)路由都保存在這個(gè)表里
表0:默認(rèn)保留
策略路由的作用
1 基于源地址選路( Source-Sensitive Routing)
2 根據(jù)服務(wù)級(jí)別選路( Quality of Service)
3 節(jié)省費(fèi)用的應(yīng)用
4 負(fù)載平衡(Load Sharing)