日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 路由表 的一些相关资料

發(fā)布時間:2024/4/14 linux 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 路由表 的一些相关资料 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

===============================================================================

linux 路由表維護(hù)

查看 Linux 內(nèi)核路由表

使用下面的 route 命令可以查看 Linux 內(nèi)核路由表。

# routeDestination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0

route 命令的輸出項說明

輸出項 說明
Destination 目標(biāo)網(wǎng)段或者主機(jī)
Gateway 網(wǎng)關(guān)地址,”*” 表示目標(biāo)是本主機(jī)所屬的網(wǎng)絡(luò),不需要路由
Genmask 網(wǎng)絡(luò)掩碼
Flags 標(biāo)記。一些可能的標(biāo)記如下:

U — 路由是活動的

H — 目標(biāo)是一個主機(jī)

G — 路由指向網(wǎng)關(guān)

R — 恢復(fù)動態(tài)路由產(chǎn)生的表項

D — 由路由的后臺程序動態(tài)地安裝

M — 由路由的后臺程序修改

! — 拒絕路由
Metric 路由距離,到達(dá)指定網(wǎng)絡(luò)所需的中轉(zhuǎn)數(shù)(linux 內(nèi)核中沒有使用)
Ref 路由項引用次數(shù)(linux 內(nèi)核中沒有使用)
Use 此路由項被路由軟件查找的次數(shù)
Iface 該路由表項對應(yīng)的輸出接口

3 種路由類型

主機(jī)路由

主機(jī)路由是路由選擇表中指向單個IP地址或主機(jī)名的路由記錄。主機(jī)路由的Flags字段為H。例如,在下面的示例中,本地主機(jī)通過IP地址192.168.1.1的路由器到達(dá)IP地址為10.0.0.10的主機(jī)。

Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ------ --- --- -----
10.0.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0

網(wǎng)絡(luò)路由

網(wǎng)絡(luò)路由是代表主機(jī)可以到達(dá)的網(wǎng)絡(luò)。網(wǎng)絡(luò)路由的Flags字段為N。例如,在下面的示例中,本地主機(jī)將發(fā)送到網(wǎng)絡(luò)192.19.12的數(shù)據(jù)包轉(zhuǎn)發(fā)到IP地址為192.168.1.1的路由器。

Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ----- --- --- -----
192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0

默認(rèn)路由

當(dāng)主機(jī)不能在路由表中查找到目標(biāo)主機(jī)的IP地址或網(wǎng)絡(luò)路由時,數(shù)據(jù)包就被發(fā)送到默認(rèn)路由(默認(rèn)網(wǎng)關(guān))上。默認(rèn)路由的Flags字段為G。例如,在下面的示例中,默認(rèn)路由是IP地址為192.168.1.1的路由器。

Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ------ --- --- -----
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

配置靜態(tài)路由

route 命令

設(shè)置和查看路由表都可以用 route 命令,設(shè)置內(nèi)核路由表的命令格式是:

# route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

其中:

  • add : 添加一條路由規(guī)則
  • del : 刪除一條路由規(guī)則
  • -net : 目的地址是一個網(wǎng)絡(luò)
  • -host : 目的地址是一個主機(jī)
  • target : 目的網(wǎng)絡(luò)或主機(jī)
  • netmask : 目的地址的網(wǎng)絡(luò)掩碼
  • gw : 路由數(shù)據(jù)包通過的網(wǎng)關(guān)
  • dev : 為路由指定的網(wǎng)絡(luò)接口

route 命令使用舉例

添加到主機(jī)的路由

# route add -host 192.168.1.2 dev eth0:0
# route add -host 10.20.30.148 gw 10.20.30.40

添加到網(wǎng)絡(luò)的路由

# route add -net 10.20.30.40 netmask 255.255.255.248 eth0
# route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route add -net 192.168.1.0/24 eth1

添加默認(rèn)路由

# route add default gw 192.168.1.1

刪除路由

# route del -host 192.168.1.2 dev eth0:0
# route del -host 10.20.30.148 gw 10.20.30.40
# route del -net 10.20.30.40 netmask 255.255.255.248 eth0
# route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route del -net 192.168.1.0/24 eth1
# route del default gw 192.168.1.1

設(shè)置包轉(zhuǎn)發(fā)

在 CentOS 中默認(rèn)的內(nèi)核配置已經(jīng)包含了路由功能,但默認(rèn)并沒有在系統(tǒng)啟動時啟用此功能。開啟 Linux的路由功能可以通過調(diào)整內(nèi)核的網(wǎng)絡(luò)參數(shù)來實(shí)現(xiàn)。要配置和調(diào)整內(nèi)核參數(shù)可以使用 sysctl 命令。例如:要開啟 Linux內(nèi)核的數(shù)據(jù)包轉(zhuǎn)發(fā)功能可以使用如下的命令。

# sysctl -w net.ipv4.ip_forward=1

這樣設(shè)置之后,當(dāng)前系統(tǒng)就能實(shí)現(xiàn)包轉(zhuǎn)發(fā),但下次啟動計算機(jī)時將失效。為了使在下次啟動計算機(jī)時仍然有效,需要將下面的行寫入配置文件/etc/sysctl.conf。

# vi /etc/sysctl.confnet.ipv4.ip_forward = 1

用戶還可以使用如下的命令查看當(dāng)前系統(tǒng)是否支持包轉(zhuǎn)發(fā)。

# sysctl net.ipv4.ip_forward


===============================================================================

Linux路由表的結(jié)構(gòu)與算法分析黃一文路由是網(wǎng)絡(luò)棧的核心部分。路由表本身的設(shè)計很大情度上影響著路由的性能,并且好的設(shè)計能減少系統(tǒng)資源的消耗,這兩方面尤其體現(xiàn)在路由表的查找上。目前的內(nèi)核路由存在兩種查找算法,一種為HASH算法,另一種為LC-trie算法,前者是目前內(nèi)核使用的缺省算法,而后者更適用在超大路由表的情況,它在這種情況提高查找效率的同時,大大地增加了算法本身的復(fù)雜性和內(nèi)存的消耗。綜上,這兩種算法各有其適用的場合,本文分析了基于2.6.18內(nèi)核路由部分的代碼在HASH算法上路由表結(jié)構(gòu)的實(shí)現(xiàn),并且在文章最后給出了一個簡單的策略路由的應(yīng)用。一、路由表的結(jié)構(gòu)為了支持策略路由,Linux使用了多個路由表而不是一個,即使不使用策略路由,Linux也使用了兩個路由表,一個用于上傳給本地上層協(xié)議,另一個則用于轉(zhuǎn)發(fā)。Linux使用多個路由表而不是一個,使不同策略的路由存放在不同的表中,有效地被免了查找龐大的路由表,在一定情度上提高了查找了效率。路由表本身不是由一個結(jié)構(gòu)表示,而是由多個結(jié)構(gòu)組合而成。路由表可以說是一個分層的結(jié)構(gòu)組合。在第一層,它先將所有的路由根據(jù)子網(wǎng)掩碼(netmask)的長度(0~32)分成33個部分(structfn_zone),然后在同一子網(wǎng)掩碼(同一層)中,再根據(jù)子網(wǎng)的不同(如10.1.1.0/24和10.1.2.0/24),劃分為第二層(struct fib_node),在同一子網(wǎng)中,有可能由于TOS等屬性的不同而使用不同的路由,這就是第三層(structfib_alias),第三層結(jié)構(gòu)表示一個路由表項,而每個路由表項又包括一個相應(yīng)的參數(shù),如協(xié)議,下一跳路由地址等等,這就是第四層(structfib_info)。分層的好處是顯而易見的,它使路由表的更加優(yōu)化,邏輯上也更加清淅,并且使數(shù)據(jù)可以共享(如structfib_info),從而減少了數(shù)據(jù)的冗余。


struct fib_table *fib_tables[RT_TABLE_MAX+1]; // RT_TABLE_MAX 為255

? ? ? 圖1為一個路由表的總體結(jié)構(gòu)。自上而下由左向右看,它首先為一個fib_table結(jié)構(gòu)指針的數(shù)組,它被定義為:


struct fib_table {unsigned char tb_id;unsigned tb_stamp;int ? ? ? ? ? (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res);int ? ? ? ? ? (*tb_insert)(struct fib_table *table, struct rtmsg *r,……void ? ? ? ?(*tb_select_default)(struct fib_table *table,const struct flowi *flp, struct fib_result *res);unsigned char tb_data[0];};

? ? ? 每個fib_table結(jié)構(gòu)在內(nèi)核中表示一個路由表:

+圖1(引自[1])這個結(jié)構(gòu)中包括這個表的ID,以及主要的一些用于操作路由表的函數(shù)指針,這里我們只關(guān)心最后一個域――tb_data[0],這是一個零長的數(shù)組,它在內(nèi)核中也較為常見,它表示


struct fn_hash {struct fn_zone *fn_zones[33];struct fn_zone *fn_zone_list;};

指向這個結(jié)構(gòu)的末尾。由圖1可以看到,這個結(jié)構(gòu)的末尾接著便是一個struct fn_hash結(jié)構(gòu),這個結(jié)構(gòu)是隨著fib_table結(jié)構(gòu)一起分配的,所以fib_table->tb_data就是fn_hash。


struct fn_zone {struct fn_zone ? ? ? ? ?*fz_next; /* Next not empty zone */struct hlist_head ? ? *fz_hash; ? ? ? /* Hash table pointer ? ? ?*/int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?fz_nent; ? /* Number of entries ? ? ?*/int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?fz_divisor; ? ? ?/* Hash divisor ? ? ? ? ? ? ?*/u32 ? ? ? ? ? ? ? ? ? ? ? ? ? ? fz_hashmask; /* (fz_divisor - 1) ? */#define FZ_HASHMASK(fz) ? ? ? ? ((fz)->fz_hashmask)int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?fz_order; /* Zone order ? ? ? ? */u32 ? ? ? ? ? ? ? ? ? ? ? ? ? ? fz_mask;#define FZ_MASK(fz) ? ? ? ? ?((fz)->fz_mask)};

? ? ? 這個fn_zone域就是我們上面提前的結(jié)構(gòu),用于將路由根據(jù)子網(wǎng)掩碼的長度分開成33個部分,其中fn_zones[0]用于默認(rèn)網(wǎng)關(guān)。而fn_zone_list域就是將正在使用的fn_zone鏈成一個鏈表。接著再深入到struct fn_zone結(jié)構(gòu)中:

這個結(jié)構(gòu)中有兩個域比較重要,一個為fz_hash域,它指向一個HASH表的表頭,這個HASH的長度是fz_divisor。并且這個HASH表的長度是可變的,當(dāng)表長達(dá)到一個限定值時,將重建這個HASH表,被免出現(xiàn)HASH沖突表過長造成查找效率降低。為了提高查找的效率,內(nèi)核使用了大量的HASH表,而路由表就是一個例子。在圖1中可以看到,等長子網(wǎng)掩碼的路由存放在同一個fn_zone中,而根據(jù)到不同子網(wǎng)(fib_node)的路由鍵值(fn_key),將它HASH到相應(yīng)的鏈表中。


struct fib_node {struct hlist_node ? ? fn_hash;struct list_head ? ? ? fn_alias;u32 ? ? ? ? ? ? ? ?fn_key;};
這個鍵值其實(shí)就是這個子網(wǎng)值了(如10.1.1.0/24,則子網(wǎng)值為10.1.1),得到這個鍵值通過n =fn_hash()函數(shù)HASH之后就是這個子網(wǎng)對應(yīng)的HASH值,然后就可以插入到相應(yīng)的fz_hash[n]鏈表中了。沖突的fib_node由fn_hash域相鏈,而fn_alias則是指向到達(dá)這個子網(wǎng)的路由了。


struct fib_alias {struct list_head ? ? ? fa_list;struct rcu_head ? ? ?rcu;struct fib_info ? ? ? ?*fa_info;u8 ? ? ? ? ? ? ? ? ?fa_tos;u8 ? ? ? ? ? ? ? ? ?fa_type;u8 ? ? ? ? ? ? ? ? ?fa_scope;u8 ? ? ? ? ? ? ? ? ?fa_state;};
當(dāng)?shù)竭_(dá)這個子網(wǎng)的路由由于TOS等屬性的不同可存在著多個路由時,它們就通過fib_alias中fa_list域?qū)⑦@些路由表項鏈成一個鏈表。這個結(jié)構(gòu)中的另一個域fa_info指向一個fib_info結(jié)構(gòu),這個才是存放真正重要路由信息的結(jié)構(gòu)。


struct fib_info {struct hlist_node ? ? fib_hash;struct hlist_node ? ? fib_lhash;……int ? ? ? ? ? ? ? ? ?fib_dead;unsigned ? ? ? ? fib_flags;int ? ? ? ? ? ? ? ? ?fib_protocol;u32 ? ? ? ? ? ? ? ?fib_prefsrc;u32 ? ? ? ? ? ? ? ?fib_priority;……int ? ? ? ? ? ? ? ? ? ? ? ? fib_nhs;struct fib_nh ? ? ? ? ?fib_nh[0];#define fib_dev ? ? ? ? ? ? fib_nh[0].nh_dev};
這個結(jié)構(gòu)里面是一個用于路由的標(biāo)志和屬性,其中最重要的一個域是fib_nh[0],在這里,我們再次看到了零長數(shù)組的應(yīng)用,它是通過零長來實(shí)現(xiàn)變長結(jié)構(gòu)的功能的。因為,我們需要一個定長的fib_info結(jié)構(gòu),但是在這個結(jié)構(gòu)末尾,我們需要的fib_nh結(jié)構(gòu)的個數(shù)是不確定的,它在運(yùn)行時確定。這樣,我們就可以通過這種結(jié)構(gòu)組成,在運(yùn)行時為fib_info分配空間的時候,同時在其末尾分配所需的若干個fib_nh結(jié)構(gòu)數(shù)組,并且這個結(jié)構(gòu)數(shù)組可以通過fib_info->fib_nh[n]來訪問,在完成fib_info的分配后將fib_nhs域置為這個數(shù)組的長度。另一方面,fib_info也是HASH表的一個應(yīng)用,結(jié)構(gòu)中存在著兩個域,分別是fib_hash和fib_lhash,它們都用于HASH鏈表。這個結(jié)構(gòu)在完成分配后,將被用fib_hash域鏈入fib_info_hash表中,如果這個路由存在首選源地址,這個fib_info將同時被用fib_lhash鏈入fib_info_laddrhash表中。這樣,就可以根據(jù)不同目的實(shí)現(xiàn)快速查找了。Structfib_nh也是一個重要的結(jié)構(gòu)。它存放著下一跳路由的地址(nh_gw)。剛剛已經(jīng)提到,一個路由(fib_alias)可能有多個fib_nh結(jié)構(gòu),它表示這個路由有多個下一跳地址,即它是多路徑(multipath)的。下一跳地址的選擇也有多種算法,這些算法都是基于nh_weight,nh_power域的。nh_hash域則是用于將nh_hash鏈入HASH表的。


struct fib_nh {struct net_device ? ?*nh_dev;struct hlist_node ? ? nh_hash;struct fib_info ? ? ? ?*nh_parent;unsigned ? ? ? ? ? ? ? ?nh_flags;unsigned char ? ? ? ?nh_scope;#ifdef CONFIG_IP_ROUTE_MULTIPATHint ? ? ? ? ? ? ? ? ?nh_weight;int ? ? ? ? ? ? ? ? ?nh_power;#endif#ifdef CONFIG_NET_CLS_ROUTE__u32 ? ? ? ? ? ? ? ? ? nh_tclassid;#endifint ? ? ? ? ? ? ? ? ?nh_oif;u32 ? ? ? ? ? ? ? ?nh_gw;};
二、路由的查找路由的查找速度直接影響著路由及整個網(wǎng)絡(luò)棧的性能。路由的查找當(dāng)然首先發(fā)生在路由緩存中,當(dāng)在緩存中查找失敗時,它再轉(zhuǎn)去路由表中查找,這是本文所關(guān)注的地方。上一節(jié)已經(jīng)詳細(xì)地描述了路由表的組成。當(dāng)一個主要的IP層將要發(fā)送或接收到一個IP數(shù)據(jù)包時,它就要調(diào)用路由子系統(tǒng)完成路由的查找工作。路由表查找就是根據(jù)給定的參數(shù),在某一個路由表中找到合適的下一跳路由的地址。上面已提到過,當(dāng)一個主機(jī)不支持策略路由時,它只使用了兩個路由表,一個是ip_fib_local_table,用于本地,另一個是ip_fib_main_table,用于接發(fā)。只有在查找ip_fib_local_table表時沒有找到匹配的路由(不是發(fā)給本地的)它才會去查找ip_fib_main_table。當(dāng)一個主機(jī)支持策略路由時,它就有可能存在著多個路由表,因而路由表的選擇也就是查找的一部分。路由表的選擇是由策略來確定的,而策略則是由應(yīng)用(用戶)來指定的,如能過iprule命令:


ip rule add from 10.1.1.0/24 table TR1ip rule add iff eth0 table RT2
如上,第一條命令創(chuàng)建了基于源地址路由的一條策略,這個策略使用了RT1這個路由表,第二條命令創(chuàng)建了基于數(shù)據(jù)包入口的一個策略,這個策略使用了RT2這個路由表。當(dāng)被指定的路由表不存在時,相應(yīng)的路由表將被創(chuàng)建。第二步就是遍歷這個路由表的fn_zone,遍歷是從最長前綴(子網(wǎng)掩碼最長)的fn_zone開始的,直到找到或出錯為止。因為最長前綴才是最匹配的。假設(shè)有如下一個路由表:


dst ? ? ? ? ? ? ? ? nexthop ? ? ? ? ? ? ? dev10.1.0.0/16 ? ? ? 10.1.1.1 ? ? ? ? ? ? ? ? ? ? eth010.1.0.0/24 ? ? ? ? ?10.1.0.1 ? ? ? ? ? ? ? eth1
它會先找到第二條路由,然后選擇10.1.0.1作為下一跳地址。但是,如果由第二步定位到的子網(wǎng)(fib_node)有多個路由,如下:


dst ? ? ? ? ? ? ? ? nexthop ? ? ? ? ? ? ? dev10.1.0.0/24 ? ? ? 10.1.0.1 ? ? ? ? ? ? ? ? ? ? eth110.1.0.0/24 ? ? ? ? ?10.1.0.2 ? ? ? ? ? ? ? eth1
到達(dá)同一個子網(wǎng)有兩個可選的路由,僅憑目的子網(wǎng)無法確定,這時,它就需要更多的信息來確定路由的選擇了,這就是用于查找路由的鍵值(structflowi)還包括其它信息(如TOS)的原因。這樣,它才能定位到對應(yīng)一個路由的一個fib_alias實(shí)例。而它指向的fib_info就是路由所需的信息了。最后一步,如果內(nèi)核被編譯成支持多路徑(multipath)路由,則fib_info中有多個fin_nh,這樣,它還要從這個fib_nh數(shù)組中選出最合適的一個fib_nh,作為下一跳路由。三、路由的插入與刪除路由表的插入與刪除可以看看是路由查找的一個應(yīng)用,插入與刪除的過程本身也包含一個查找的過程,這兩個操作都需要檢查被插入或被刪除的路由表項是否存在,插入一個已經(jīng)存在的路由表項要做特殊的處理,而刪除一個不存在的路由表項當(dāng)然會出錯。下面看一個路由表插入的例子:


ip route add 10.0.1.0/24 nexthop via 10.0.1.1 ?weight 1nexthop via 10.0.1.2 ?weight 2table RT3
這個命令在內(nèi)核中建立一條新的路由。它首先查找路由表RT3中的子網(wǎng)掩碼長為24的fn_zone,如果找不到,則創(chuàng)建一個fn_zone。接著,繼續(xù)查找子網(wǎng)為10.0.1的fib_node,同樣,如果不存在,創(chuàng)建一個fib_node。然后它會在新建一個fib_info結(jié)構(gòu),這個結(jié)構(gòu)包含2個fib_nh結(jié)構(gòu)的數(shù)組(因為有兩個nexthop),并根據(jù)用戶空間傳遞過來的信息初始化這個結(jié)構(gòu),最后內(nèi)核再創(chuàng)建一個fib_alias結(jié)構(gòu)(如果先前已經(jīng)存在,則出錯),并用fib_nh來創(chuàng)始化相應(yīng)的域,最后將自己鏈入fib_node的鏈中,這樣就完成了路由的插入操作。路由的刪除操作是插入操作的逆過程,它包含一系列的查找與內(nèi)存的釋放操作,過程比較簡單,這里就不再贅述了。四、策略路由的一個簡單應(yīng)用Linux系統(tǒng)在策略路由開啟的時候?qū)⑹褂枚鄠€路由表,它不同于其它某些系統(tǒng),在所有情況下都只使用單個路由表。雖然使用單個路由表也可以實(shí)現(xiàn)策略路由,但是如本文之前所提到的,使用多個路由表可以得到更好的性能,特別在一個大型的路由系統(tǒng)中。下面只通過簡單的情況說明Linux下策略路由的應(yīng)用。 如圖2,有如下一個應(yīng)用需求,其中網(wǎng)關(guān)服務(wù)器上有三個網(wǎng)絡(luò)接口。接口1的IP為172.16.100.1,子網(wǎng)掩碼為255.255.255.0,網(wǎng)關(guān)gw1為a.b.c.d,172.16.100.0/24這個網(wǎng)段的主機(jī)可以通過這個網(wǎng)關(guān)上網(wǎng);接口2的IP是172.16.10.1,子網(wǎng)掩碼同接口一,網(wǎng)關(guān)gw2為e.f.g.h,172.16.10.0/24這個網(wǎng)段的主機(jī)可以通過這個網(wǎng)關(guān)上網(wǎng);接口0的IP為192.168.1.1,這個網(wǎng)段的主機(jī)由于網(wǎng)絡(luò)帶寬的需求需要通過e.f.g.h這個更快的網(wǎng)關(guān)路由出去。圖 2步驟一:設(shè)置各個網(wǎng)絡(luò)接口的IP,和默認(rèn)網(wǎng)關(guān):


ip addr add 172.16.100.1/24 dev eth1ip route add default via a.b.c.d dev eth1
其它接口IP的設(shè)置和第一個接口一樣,這時,如果沒有其它設(shè)置,則所有的數(shù)據(jù)通過這個默認(rèn)網(wǎng)關(guān)路由出去。步驟二:使子網(wǎng)172.16.10.0/24可以通過gw2路由出去


ip route add 172.16.10.0/24 via e.f.g.h dev eth2


步驟三:添加一個路由表


echo ? “250 HS_RT” >> /etc/iproute2/rt_tables
步驟四:使用策略路由使192.168.1.0/24網(wǎng)段的主機(jī)可以通過e.f.g.h這個網(wǎng)關(guān)上網(wǎng)


ip rule add from 192.168.1.0/24 dev eth0 table HS_RT pref 32765ip route add default via e.f.g.h dev eth2iptables –t nat –A POSTROUTING –s 192.168.1.0/24 –j MASQUERADE
步驟五:刷新路由cache,使新的路由表生效


ip route flush cache
這樣就可以實(shí)現(xiàn)了以上要求的策略路由了,并且可以通過traceroute工具來檢測上面的設(shè)置是否能正常工作。
===============================================================================

linux雙網(wǎng)卡怎么設(shè)置我就不說了,我這里說的是linux雙網(wǎng)卡的流量問題...
可能這個問題很偏們..你們也許用不上..我還是要說..


問題描述,一個linux主機(jī),上面兩個網(wǎng)卡..:)

route -n的輸出是這樣的.


Destination Gateway Genmask Flags Metric Ref Use Iface


61.132.43.128 ? 0.0.0.0 ? ? ? ? 255.255.255.192 U ? ? 0 ? ? ?0 ? ? ? ?0 eth1

127.0.0.0 ? ? ? 0.0.0.0 ? ? ? ? 255.0.0.0 ? ? ? U ? ? 0 ? ? ?0 ? ? ? ?0 lo

0.0.0.0 ? ? ? ? 61.132.43.134 ? 0.0.0.0 ? ? ? ? UG ? ?0 ? ? ?0 ? ? ? ?0 eth0



這里解釋一下...第一行是說,你要訪問61.132.43.128這個網(wǎng)段,掩碼是255.255.255.192的話..從e
th1這個網(wǎng)卡出去..
第二行是關(guān)于本機(jī)的,訪問自己從lo這個虛擬的本地網(wǎng)卡走..
第三行是說你要去任何地方的話..從網(wǎng)關(guān)61.132.43.134出去.并且網(wǎng)卡是eth0


到這里我們看到了..我們除了去61.132.43.128這個網(wǎng)絡(luò)是從eth1走以外..去其他地方都是從eth0
...

這樣是不是很浪費(fèi)了雙網(wǎng)卡??沒錯..是很浪費(fèi)..因為不論你用那種監(jiān)測工具查看流量..都是eth0有
..而其他網(wǎng)卡沒有...天哪...為此我是煞費(fèi)苦心..甚至懷疑網(wǎng)卡是不是壞了..因為在win2k上這種
慮槭遣豢贍芊⑸..:)

那我們怎么解決這個問題呢?有人也許會說給個不同網(wǎng)關(guān)讓另一塊網(wǎng)卡用其他網(wǎng)關(guān)不就可以..是這
鍪強(qiáng)梢..但是問題是我的ip都是在同一個網(wǎng)段..那來的不同網(wǎng)關(guān).?網(wǎng)關(guān)就一個61.132.43.134...

還好linux系統(tǒng)給我們提供了一個很好的路由套件---iproute2

我們來熟悉一下..iproute2由幾個常見的命令..
ip ro ls ip就是ip命令啦,ro就是route的所寫,ls是list的縮寫...
整個命令就是列出系統(tǒng)的路由表..這個可和route
-n的效果差不多..但是更為清楚系統(tǒng)的route是如何的..

我們來看看吧:


[root@localhost root]# ip ro ls


61.132.43.128/26 dev eth1 ?proto kernel ?scope link ?src 61.132.43.136

127.0.0.0/8 dev lo ?scope link

default via 61.132.43.134 dev eth0




是不是一樣呢?由幾個地方不同..第一條多了一個src,增加了對源數(shù)據(jù)包的選擇,而且子網(wǎng)掩碼也變
成/26的形式..(參考ip地址的書籍)
最后一個仍然是網(wǎng)關(guān)...


現(xiàn)在我們只要稍稍動手把從61.132.43.136出來的流量讓他不要從eth0出去..然他走eth1
我們加一條自定義的路由表


ip ro add default via 61.132.43.134 table 200




這里只是加了一條默認(rèn)路由到一個自定義的路由表200中,最大數(shù)值是255,但是你不要用255,因為那
是系統(tǒng)默認(rèn)用了..你用200以下就可以.
具體的路由表在/etc/iproute2/rt_tables中


查看剛才建立的路由表可以用ip ro ls table 200


[root@localhost root]# ip ro ls table 200


default via 61.132.43.134 dev eth1



看到了嗎?雖然我沒有指定dev是什么.但是系統(tǒng)自動分配了一個eth1給這個路由表,因為eth0已經(jīng)用
在主路由表中了..
這也說明了,的確不能在同一個路由表中由相同的網(wǎng)關(guān)..雖然可以設(shè)置,但是具體沒什么作用.

然后我們要用一個規(guī)則把,匹配的數(shù)據(jù)包引導(dǎo)到剛剛建立的路由表中..:)


ip ru add from 61.132.43.136 table 200




這里ru是rule的縮寫.from是一個匹配的動作.就是所源地址是61.132.43.136的包..請走自定義路
殺的設(shè)置..:)


查看一下


[root@localhost root]# ip ru ls


0: ? ? ?from all lookup local

32765: ?from 61.132.43.136 lookup 200

32766: ?from all lookup main

32767: ?from all lookup 253



ip ro flush cache


linux 下 雙網(wǎng)卡 同網(wǎng)段,可以把IP_FORWARD 打開,這樣一個網(wǎng)卡down掉數(shù)據(jù)會從另外一個網(wǎng)卡出去
===============================================================================
linux路由表 2010年08月18日 星期三 17:44

宏CONFIG_IP_MULTIPLE_TABLES表示路由策略,當(dāng)定義了該宏,也即意味著內(nèi)核配置了“路由策略”。產(chǎn)生的最大的不同就是內(nèi)核可以使用多達(dá)256張F(tuán)IB。其實(shí),這256張F(tuán)IB在內(nèi)核中的表示是一個全局?jǐn)?shù)組:
? ? ? ?struct fib_table *myfib_tables[RT_TABLE_MAX+1];
而宏RT_TABLE_MAX定義如下:
? ? ? ?enum rt_class_t
? ? ? ?{
? ? ? ? ? ?RT_TABLE_UNSPEC=0,
? ? ? ? ? ?RT_TABLE_DEFAULT=253,
? ? ? ? ? ?RT_TABLE_MAIN=254,
? ? ? ? ? ?RT_TABLE_LOCAL=255,
? ? ? ? ? ?__RT_TABLE_MAX
? ? ? ?};
? ? ? ?#define RT_TABLE_MAX (__RT_TABLE_MAX - 1)
? ?我們可以看到,雖然這張表多達(dá)256項,但枚舉類型rt_class_t給出的表示最常用的也就三項,在系統(tǒng)初始化時,由內(nèi)核配置生成的路由表只有RT_TABLE_MAIN,RT_TABLE_LOCAL兩張。
? main表中存放的是路由類型為RTN_UNICAST的所有路由項,即網(wǎng)關(guān)或直接連接的路由。在myfib_add_ifaddr函數(shù)中是這樣添加main表項的:對于某個網(wǎng)絡(luò)設(shè)備接口的一個IP地址,如果目的地址的網(wǎng)絡(luò)號不是零網(wǎng)絡(luò)(網(wǎng)絡(luò)號與子網(wǎng)號全為零),并且它是primary地址,同時,它不是D類地址(網(wǎng)絡(luò)號與子網(wǎng)號占32位)。最后一個條件是:它不是一個環(huán)回地址(device上有flagIFF_LOOPBACK)。那么,就添加為main表項,如果是環(huán)回地址,則添加為local表的一個表項。
? ?在我們的系統(tǒng)中,有兩個已開啟的網(wǎng)絡(luò)設(shè)備接口eth0和lo,eth0上配置的primaryIP地址是172.16.48.2,所以,相應(yīng)的,main表中就只有一項。為main表添加路由項的時候,該路由項的目的地址是子網(wǎng)內(nèi)的所有主機(jī)(把主機(jī)號部分字節(jié)清零),而對應(yīng)于lo,在local表中也有一項,其類型為RTN_LOCAL(注:前一篇文章中的local表的hash8中的路由項表述有誤,類型應(yīng)該是RTN_LOCAL,而不是RTN_BORADCAST)。
? 而其它的路由項全部歸入local表,主要是廣播路由項和本地路由項。在我們的系統(tǒng)環(huán)境下,local表共有7項,每個網(wǎng)絡(luò)設(shè)備接口占三項。分別是本地地址(源跟目的地址一致),子網(wǎng)廣播地址(主機(jī)號全為1),子網(wǎng)廣播地址(主機(jī)號為零)。再加上一個lo的RTN_LOCAL項。
? ?現(xiàn)在我們再來看myfib_add_ifaddr函數(shù)的路由添加策略。對于一個傳入的ip地址(結(jié)構(gòu)structin_ifaddr表示),如果它是secondary地址,首先要確保同一個網(wǎng)絡(luò)設(shè)備接口上存在一個跟其同類型的primary地址(網(wǎng)絡(luò)號與子網(wǎng)號完全一致),因為,路由項的信息中的源地址全是primary的,secondary地址其實(shí)沒有實(shí)際使用,它不會在路由表中產(chǎn)生路由項。然后,向local表添加一項目的地址是它本身的,類型為RTN_LOCAL的路由項;如果該ip地址結(jié)構(gòu)中存在廣播地址,并且不是受限廣播地址(255.255.255.255),那么向local表添加一個廣播路由項;然后,對符合加入main表的條件進(jìn)行判斷,如果符合,除了加入main表,最后,如果不是D類地址,還要加入兩個廣播地址(其實(shí),已經(jīng)跟前面有重疊,很多情況下不會實(shí)際觸發(fā)加入的動作,只要記住,一個ip地址項對應(yīng)最多有兩個廣播地址就可以了)。


多路由表(multiple Routing Tables)

  傳統(tǒng)的路由算法是僅使用一張路由表的。但是在有些情形底下,我們是需要使用多路由表的。例如一個子網(wǎng)通過一個路由器與外界相連,路由器與外界有兩條線路相連,其中一條的速度比較快,一條的速度比較慢。對于子網(wǎng)內(nèi)的大多數(shù)用戶來說對速度并沒有特殊的要求,所以可以讓他們用比較慢的路由;但是子網(wǎng)內(nèi)有一些特殊的用戶卻是對速度的要求比較苛刻,所以他們需要使用速度比較快的路由。如果使用一張路由表上述要求是無法實(shí)現(xiàn)的,而如果根據(jù)源地址或其它參數(shù),對不同的用戶使用不同的路由表,這樣就可以大大提高路由器的性能。

規(guī)則(rule

  規(guī)則是策略性的關(guān)鍵性的新的概念。我們可以用自然語言這樣描述規(guī)則,例如我門可以指定這樣的規(guī)則:

  規(guī)則一:“所有來自192.16.152.24的IP包,使用路由表10, 本規(guī)則的優(yōu)先級別是1500”

  規(guī)則二:“所有的包,使用路由表253,本規(guī)則的優(yōu)先級別是32767”

  我們可以看到,規(guī)則包含3個要素:

  什么樣的包,將應(yīng)用本規(guī)則(所謂的SELECTOR,可能是filter更能反映其作用);

  符合本規(guī)則的包將對其采取什么動作(ACTION),例如用那個表;

  本規(guī)則的優(yōu)先級別。優(yōu)先級別越高的規(guī)則越先匹配(數(shù)值越小優(yōu)先級別越高)。

策略性路由的配置方法

  傳統(tǒng)的linux下配置路由的工具是route,而實(shí)現(xiàn)策略性路由配置的工具是iproute2工具包。這個軟件包是由Alexey Kuznetsov開發(fā)的,軟件包所在的主要網(wǎng)址為ftp://ftp.inr.ac.ru/ip-routing/。
這里簡單介紹策略性路由的配置方法,以便能更好理解第二部分的內(nèi)容。詳細(xì)的使用方法請參考Alexey Kuznetsov寫的 ip-cfref文檔。策略性路由的配置主要包括接口地址的配置、路由的配置、規(guī)則的配置。

接口地址的配置IP Addr

  對于接口的配置可以用下面的命令進(jìn)行:

Usage: ip addr [ add | del ] IFADDR dev STRING

  例如:

router># ip addr add 192.168.0.1/24 broadcast 192.168.0.255 label eth0 dev eth0

  上面表示,給接口eth0賦予地址192.168.0.1 掩碼是255.255.255.0(24代表掩碼中1的個數(shù)),廣播地址是192.168.0.255

路由的配置IP Route

  Linux最多可以支持255張路由表,其中有3張表是內(nèi)置的:

  表255 本地路由表(Local table) 本地接口地址,廣播地址,已及NAT地址都放在這個表。該路由表由系統(tǒng)自動維護(hù),管理員不能直接修改。

  表254 主路由表(Main table) 如果沒有指明路由所屬的表,所有的路由都默認(rèn)都放在這個表里,一般來說,舊的路由工具(如route)所添加的路由都會加到這個表。一般是普通的路由。

  表253 默認(rèn)路由表 (Default table) 一般來說默認(rèn)的路由都放在這張表,但是如果特別指明放的也可以是所有的網(wǎng)關(guān)路由。

  表 0 保留

  路由配置命令的格式如下:


Usage: ip route list SELECTOR
ip route { change | del | add | append | replace | monitor } ROUTE


  如果想查看路由表的內(nèi)容,可以通過命令:

  ip route list table table_number

  對于路由的操作包括change、del、add 、append 、replace 、 monitor這些。例如添加路由可以用:


router># ip route add 0/0 via 192.168.0.4 table main
router># ip route add 192.168.3.0/24 via 192.168.0.3 table 1


第一條命令是向主路由表(main table)即表254添加一條路由,路由的內(nèi)容是設(shè)置192.168.0.4成為網(wǎng)關(guān)。


  第二條命令代表向路由表1添加一條路由,子網(wǎng)192.168.3.0(子網(wǎng)掩碼是255.255.255.0)的網(wǎng)關(guān)是192.168.0.3。

  在多路由表的路由體系里,所有的路由的操作,例如網(wǎng)路由表添加路由,或者在路由表里尋找特定的路由,需要指明要操作的路由表,所有沒有指明路由表,默認(rèn)是對主路由表(表254)進(jìn)行操作。而在單表體系里,路由的操作是不用指明路由表的。



轉(zhuǎn)載于:https://blog.51cto.com/hillel/1381697

總結(jié)

以上是生活随笔為你收集整理的linux 路由表 的一些相关资料的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄站在线观看 | 国产午夜精品一区二区三区视频 | 日韩精品一二三四区 | 91视频h| 亚洲精品视频在线观看视频 | 亚洲欧美一区二区三区 | 88av.com| 欧美激情一区二区视频 | 精品成在人线av无码免费看 | 中国成人毛片 | 日韩欧美大陆 | 国产sm主人调教女m视频 | 一区二区三区四区av | 免费观看一区二区 | 一区二区三区在线免费观看视频 | 性生活网址 | 男女啪啪在线观看 | 日韩一区二区精品视频 | 永久免费网站直接看 | 69久人妻无码精品一区 | 久操青青 | 香港三级日本三级 | 亚洲人久久 | 精品自拍av | 欧美女优视频 | 亚洲成人av在线 | 泰坦尼克号3小时49分的观看方法 | 漂亮人妻被中出中文字幕 | 欧美成人不卡 | 麻豆短视频在线观看 | 影音先锋成人资源网 | 中文字幕在线日亚洲9 | 二区三区在线 | 日本电影一区二区三区 | 蘑菇视频黄色 | 欧美v视频 | 樱桃成人精品视频在线播放 | 熟妇人妻久久中文字幕 | 精品国产成人av在线免 | 国产在线超碰 | 91免费看片网站 | 不用播放器看av | 精品一区二区在线观看 | 91精品国产一区二区三竹菊影视 | 每日av更新 | 黄色网址在线免费播放 | 国产xxxx18 | 瑟瑟视频免费观看 | 精彩视频一区二区 | 女的高潮流时喷水图片大全 | 五月天婷婷爱 | 久久久久亚洲精品系列色欲 | 国产精品精品国产色婷婷 | 男女男精品网站 | 偷拍第1页 | 动漫av网| 无码人妻精品一区二区三区在线 | 69热在线| 亚洲视频在线观看网站 | 鲁片一区二区三区 | 亚洲一区动漫 | 欧洲一级黄 | jizz精品| 无码gogo大胆啪啪艺术 | 成人在线免费播放视频 | 毛片网在线 | 欧美日韩性 | 91毛片在线观看 | 成人动漫一区二区三区 | 少妇特殊按摩高潮惨叫无码 | 亚洲欧美黄色片 | 亚洲欧美一区二区三区 | 日韩一区二区三区视频在线 | 男生和女生靠逼视频 | 日韩免费高清视频网站 | 午夜刺激视频 | 欧美日韩在线视频一区 | 91网页在线观看 | 伊人久久大香线 | 国产丰满果冻videossex | 美女黄色在线观看 | 久久精品人人做人人爽 | 日韩网站免费观看 | 亚洲草草网 | 青青久在线视频 | 一级黄色美女 | 天堂√| 成人爱爱视频 | 亚洲hhh | 亚洲乱子伦| 久久黄色网络 | 丰满少妇久久久久久久 | 久久精品国产欧美亚洲人人爽 | 国产情侣自拍一区 | 欧美午夜精品久久久 | 北条麻妃av在线播放 | 日韩欧美有码 | 精品爆乳一区二区三区无码av | 在线观看911视频 |