多路由解決方案一:
使用下面的 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該路由表項對應的輸出接口
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
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ----- --- --- ----- 192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ------ --- --- ----- default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
# route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
其中:
add : 添加一條路由規則
del : 刪除一條路由規則
-net : 目的地址是一個網絡
-host : 目的地址是一個主機
target : 目的網絡或主機
netmask : 目的地址的網絡掩碼
gw : 路由數據包通過的網關
dev : 為路由指定的網絡接口
# 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
# 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]