歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> linux 多網卡路由問題

linux 多網卡路由問題

日期:2017/3/3 12:33:31   编辑:Linux技術

多路由解決方案一:

使用下面的 route 命令可以查看 Linux 內核路由表。

# route
Destination     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目標網段或者主機Gateway網關地址,”*” 表示目標是本主機所屬的網絡,不需要路由Genmask網絡掩碼Flags標記。一些可能的標記如下:U — 路由是活動的H — 目標是一個主機G — 路由指向網關R — 恢復動態路由產生的表項D — 由路由的後台程序動態地安裝M — 由路由的後台程序修改! — 拒絕路由Metric路由距離,到達指定網絡所需的中轉數(linux 內核中沒有使用)Ref路由項引用次數(linux 內核中沒有使用)Use此路由項被路由軟件查找的次數Iface該路由表項對應的輸出接口

3 種路由類型

主機路由

主機路由是路由選擇表中指向單個IP地址或主機名的路由記錄。主機路由的Flags字段為H。例如,在下面的示例中,本地主機通過IP地址192.168.1.1的路由器到達IP地址為10.0.0.10的主機。
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

網絡路由

網絡路由是代表主機可以到達的網絡。網絡路由的Flags字段為N。例如,在下面的示例中,本地主機將發送到網絡192.19.12的數據包轉發到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

默認路由

當主機不能在路由表中查找到目標主機的IP地址或網絡路由時,數據包就被發送到默認路由(默認網關)上。默認路由的Flags字段為G。例如,在下面的示例中,默認路由是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

配置靜態路由

route 命令

設置和查看路由表都可以用 route 命令,設置內核路由表的命令格式是:
# route  [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

其中:

add : 添加一條路由規則

del : 刪除一條路由規則

-net : 目的地址是一個網絡

-host : 目的地址是一個主機

target : 目的網絡或主機

netmask : 目的地址的網絡掩碼

gw : 路由數據包通過的網關

dev : 為路由指定的網絡接口

route 命令使用舉例

添加到主機的路由
# route add -host 192.168.1.2 dev eth0 
# route add -host 10.20.30.148 gw 10.20.30.40     #添加到10.20.30.148的網管

添加到網絡的路由

# route add -net 10.20.30.40 netmask 255.255.255.248 eth0   #添加10.20.30.40的網絡
# route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41 #添加10.20.30.48的網絡
# route add -net 192.168.1.0/24 eth1
添加默認路由

# 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

設置包轉發

在 CentOS 中默認的內核配置已經包含了路由功能,但默認並沒有在系統啟動時啟用此功能。開啟 Linux 的路由功能可以通過調整內核的網絡參數來實現。要配置和調整內核參數可以使用 sysctl 命令。例如:要開啟 Linux 內核的數據包轉發功能可以使用如下的命令。

# sysctl -w net.ipv4.ip_forward=1
這樣設置之後,當前系統就能實現包轉發,但下次啟動計算機時將失效。為了使在下次啟動計算機時仍然有效,需要將下面的行寫入配置文件/etc/sysctl.conf。

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1

用戶還可以使用如下的命令查看當前系統是否支持包轉發。

# sysctl  net.ipv4.ip_forward

多路由解決方案二:
比如建立一個socket之後,系統存在四張網卡,名稱分別為eth0、ppp0、eth1、ra0,可以通過type來設置該socket的屬性[code]SO_BINDTODEVICE,使創建的的socket和其中之一的網卡綁定在一起,方法如下:
#if 1

struct ifreq if_ppp0;

switch(type)

{

case NET_CARD_ETH0:

strncpy(if_ppp0.ifr_name, "eth0", IFNAMSIZ);

break;

case NET_CARD_PPP0:

strncpy(if_ppp0.ifr_name, "ppp0", IFNAMSIZ);

break;

case NET_CARD_ETH1:

strncpy(if_ppp0.ifr_name, "eth1", IFNAMSIZ);

break;

case NET_CARD_RA0:

strncpy(if_ppp0.ifr_name, "ra0", IFNAMSIZ);

break;

default:

errorPrintf(PRT_NET,"input netcart type error...\n");

return -1;

}

if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,(char *)&if_ppp0, sizeof(if_ppp0)) < 0)

{

errorPrintf(PRT_NET,"SO_BINDTODEVICE error...\n");

}

#endif

[/code]

Copyright © Linux教程網 All Rights Reserved