快速設(shè)置Linux路由腳本
一、高級(jí)路由
路由路由腳本自動(dòng)切換網(wǎng)關(guān),通過ping判斷網(wǎng)關(guān)的是否存活,來決定切換網(wǎng)關(guān)
路由腳本雛形:
[root@stu86 lianxi]# cat roswap.sh
#!/bin/bash
while : #死循環(huán)
do #做下面的事情
route del default #刪除以前的默認(rèn)網(wǎng)關(guān)配置
route add default dev ppp0 gw 1.1.1.1 #添加一條網(wǎng)關(guān)
while ping -c 1 1.1.1 &> /dev/null #再次進(jìn)入子循環(huán)里面,ping成功也就是為真的話,那么就循環(huán),ping失敗跳出循環(huán)
do
sleep 1 #ping通后,睡1秒
done
route del default #如果ping不通,來到這個(gè)語句。就刪除前面ppp0的網(wǎng)關(guān)地址
route add default dev ppp1 gw 2.2.2.2 #并且用添加ppp1網(wǎng)關(guān)
while ! ping -c 1.1.1.1 &> /dev/null #如果ping不通則為真,ping通跳出循環(huán)。繼續(xù)從上開始了
do
sleep 1
done
done
[root@stu86 lianxi]#
根據(jù)上面路由腳本改進(jìn):使用變量是路由腳本可用性提高
[root@stu86 lianxi]# cat roswap.sh
#!/bin/bash
ISP1=1.1.1.1 #定義變量IP
ISP2=2.2.2.2 #定義變量IP
$DEV1=ppp0 #定義接口
$DEV2=ppp1 #定義接口
$TIME=1 #定義時(shí)間,以后改路由腳本只要改這些參數(shù)就可以了,不用改路由腳本內(nèi)容很方便
while :
do
route del default
route add default dev $DEV1 gw $ISP1
while ping -c $ISP1 &> /dev/null
do
sleep $TIME
done
route del default
route add default dev $DEV2 gw $ISP2
while ! ping -c 1 $ISP1 &> /dev/null
do
sleep $TIME
done
done
[root@stu86 lianxi]#
二、網(wǎng)絡(luò)常用命令
[root@stu86 lianxi]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:19:21:71:17:67
inet addr:192.168.0.86 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::219:21ff:fe71:1767/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4123 errors:0 dropped:0 overruns:0 frame:0
TX packets:61 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 #tc中l(wèi)imit大于1000值沒有意義的,tc的作用也是在這個(gè)上。物理的只支持1000
[root@stu86 lianxi]# route -n #按照越精確越靠前。這個(gè)是路由的排序規(guī)則
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.179.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.16.122.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
[root@stu86 lianxi]# route add -net 172.16.0.0 netmask 255.255.0.0 dev eth0 #添加網(wǎng)段路由
[root@stu86 lianxi]# route add -host 172.16.1.1 dev eth0 #添加主機(jī)路由
[root@stu86 lianxi]# route del -net 172.16.0.0 netmask 255.255.0.0 dev eth0 #刪除網(wǎng)段路由
[root@stu86 lianxi]# route del -host 172.16.1.1 dev eth0 #刪除主機(jī)路由
[root@stu86 lianxi]# netstat -a|less #查看所有并分屏顯示
[root@stu86 lianxi]# netstat -i #查看網(wǎng)卡詳細(xì)信息
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 4652 0 0 0 61 0 0 0 BMRU
lo 16436 0 1679 0 0 0 1679 0 0 0 LRU
vmnet1 1500 0 0 0 0 0 48 0 0 0 BMRU
vmnet8 1500 0 0 0 0 0 50 0 0 0 BMRU
[root@stu86 lianxi]#
[root@stu86 lianxi]# netstat -r #查看路由表 和route -n一樣
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.179.0 * 255.255.255.0 U 0 0 0 vmnet1
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
172.16.122.0 * 255.255.255.0 U 0 0 0 vmnet8
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
三、網(wǎng)絡(luò)命令2版將替換unix上的命令
[root@stu86 lianxi]# rpm -q iproute #IProute的第二版,可以用IP命令
iproute-2.6.18-9.el5
1)ip=ifconfig
[root@stu86 lianxi]# ip link show #ip命令顯示ip鏈路層,更加詳細(xì)
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth1:
link/ether 00:ee:ee:00:0a:76 brd ff:ff:ff:ff:ff:ff
3: eth0:
link/ether 00:19:21:71:17:67 brd ff:ff:ff:ff:ff:ff
4: sit0:
link/sit 0.0.0.0 brd 0.0.0.0
5: vmnet1:
link/ether 00:50:56:c0:00:01 brd ff:ff:ff:ff:ff:ff
6: vmnet8:
link/ether 00:50:56:c0:00:08 brd ff:ff:ff:ff:ff:ff
[root@stu86 lianxi]#
[root@stu86 lianxi]# ip ad sh dev eth0 #ip命令查看網(wǎng)絡(luò)層的ip地址
3: eth0:
link/ether 00:19:21:71:17:67 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.86/24 brd 192.168.0.255 scope global eth0
inet6 fe80::219:21ff:fe71:1767/64 scope link
valid_lft forever preferred_lft forever
[root@stu86 lianxi]# ip route show #ip命令查看路由
192.168.179.0/24 dev vmnet1 proto kernel scope link src 192.168.179.1
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.86
172.16.122.0/24 dev vmnet8 proto kernel scope link src 172.16.122.1
169.254.0.0/16 dev eth0 scope link
四、更改IP地址
更改:先down在up
[root@stu86 lianxi]# ip link help #查ip幫組
Usage: ip link set DEVICE { up | down |
arp { on | off } |
dynamic { on | off } |
multicast { on | off } |
allmulticast { on | off } |
promisc { on | off } |
trailers { on | off } |
txqueuelen PACKETS |
name NEWNAME |
address LLADDR | broadcast LLADDR |
mtu MTU }
ip link show [ DEVICE ]
[root@stu86 lianxi]# ip link show dev eth0 #查看eth0
3: eth0:
link/ether 00:19:21:71:17:67 brd ff:ff:ff:ff:ff:ff
[root@stu86 lianxi]# ip link set dev eth0 down #關(guān)閉eth0
[root@stu86 lianxi]# ip link set dev eth0 address 00:99:88:77:66:55 #更改mac地址
[root@stu86 lianxi]# ip link set dev eth0 up #啟動(dòng)eth0
改ip地址:
[root@stu86 lianxi]# ip address add dev eth0 172.16.0.222/24 #添加ip
[root@stu86 lianxi]# ip address show dev eth0 #查看eth0IP
3: eth0:
link/ether 00:19:21:71:17:67 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.86/24 brd 192.168.0.255 scope global eth0
inet 172.16.0.222/24 scope global eth0
inet6 fe80::219:21ff:fe71:1767/64 scope link
valid_lft forever preferred_lft forever
[root@stu86 lianxi]# ip address del dev eth0 172.16.0.222/24 #刪除IP
注意:如果要換IP地址,那么就要把原來的IP刪除,然后添加一個(gè)新IP地址
五、IP路由
[root@stu86 lianxi]# ip route add default dev eth0 via 192.168.0.254 #添加默認(rèn)路由
[root@stu86 lianxi]# ip route del default dev eth0 via 192.168.0.254 #刪除默認(rèn)路由
[root@stu86 lianxi]# ip route add dev eth0 10.0.0.1/32 #添加主機(jī)路由
[root@stu86 lianxi]# ip route del dev eth0 10.0.0.1/32 #刪除主機(jī)路由
[root@stu86 lianxi]# ip route add dev eth0 192.168.0.0/16 #添加網(wǎng)段路由
[root@stu86 lianxi]# ip route del dev eth0 192.168.0.0/16 #刪除網(wǎng)段路由
[root@stu86 lianxi]# ip route show dev eth0 #查看路由信息
192.168.0.0/24 proto kernel scope link src 192.168.0.86
ss命令 #和netstat命令差不多
[root@stu86 lianxi]# ss -antlp
[root@stu86 lianxi]# ip route help
Usage: ip route { list | flush } SELECTOR
ip route get ADDRESS [ from ADDRESS iif STRING ]
[ oif STRING ] [ tos TOS ]
ip route { add | del | change | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ scope SCOPE ] [ metric METRIC ]
[ mpath MP_ALGO ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
[ rtt TIME ] [ rttvar TIME ]
[ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]
[ ssthresh NUMBER ] [ realms REALM ]
[ rto_min TIME ]
TYPE := [ unicast | local | broadcast | multicast | throw |
unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
FLAGS := [ equalize ]
MP_ALGO := { rr | drr | random | wrandom }
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
TIME := NUMBER[s|ms|us|ns|j]
六、作ECMP,一個(gè)命令添加等值多路路由
[root@stu86 lianxi]# ip route add default mpath rr \ #添加路由
> nexthop dev eth0 via 192.168.0.254 weight 10 \ #添加eth0的路由c
> nexthop dev eth1 via 10.0.0.10 weight 10
用路由腳本添加等值多路路由:
[root@stu86 lianxi]# vim ecmp.sh
[root@stu86 lianxi]# cat ecmp.sh
#!/bin/bash
ISP1=""
ISP2=""
#ISPN=""....
DEV1=""
DEV2=""
#DEVn="".....
DEL="ip route del default"
ADD="ip route add default"
$DEL
$ADD nexthop dev $DEV1 via $ISP1 weight 10 \
nexthop dev $DEV2 via $ISP2 weight 10
# nexthop dev $DEVn via $ISPn weight n .....
[root@stu86 lianxi]#
到控制臺(tái)中
[root@stu86 lianxi]# cd /usr/src/kernels/2.6.18-128.el5-i686/
[root@stu86 2.6.18-128.el5-i686]# make menuconfig
IP:equal cost multipath 在內(nèi)核中選上,才支持ecmp。這個(gè)就叫做等值多路。
七、ip路由查看命令,分為main、default、local
[root@stu86 lianxi]# ip route show #只能查看部分路由
192.168.179.0/24 dev vmnet1 proto kernel scope link src 192.168.179.1
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.86
172.16.122.0/24 dev vmnet8 proto kernel scope link src 172.16.122.1
[root@stu86 lianxi]# ip route show table all #linux有很多路由表
192.168.179.0/24 dev vmnet1 proto kernel scope link src 192.168.179.1
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.86
172.16.122.0/24 dev vmnet8 proto kernel scope link src 172.16.122.1
broadcast 192.168.0.255 dev eth0 table 255 proto kernel scope link src 192.168.0.86
broadcast 127.255.255.255 dev lo table 255 proto kernel scope link src 127.0.0.1
broadcast 172.16.122.255 dev vmnet8 table 255 proto kernel scope link src 172.16.122.1
broadcast 192.168.179.255 dev vmnet1 table 255 proto kernel scope link src 192.168.179.1
broadcast 192.168.0.0 dev eth0 table 255 proto kernel scope link src 192.168.0.86
local 172.16.122.1 dev vmnet8 table 255 proto kernel scope host src 172.16.122.1
broadcast 172.16.122.0 dev vmnet8 table 255 proto kernel scope link src 172.16.122.1
broadcast 192.168.179.0 dev vmnet1 table 255 proto kernel scope link src 192.168.179.1
local 192.168.179.1 dev vmnet1 table 255 proto kernel scope host src 192.168.179.1
local 192.168.0.86 dev eth0 table 255 proto kernel scope host src 192.168.0.86
broadcast 127.0.0.0 dev lo table 255 proto kernel scope link src 127.0.0.1
local 127.0.0.1 dev lo table 255 proto kernel scope host src 127.0.0.1
local 127.0.0.0/8 dev lo table 255 proto kernel scope host src 127.0.0.1
fe80::/64 dev vmnet1 metric 256 expires 21323638sec mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev vmnet8 metric 256 expires 21323638sec mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev eth0 metric 256 expires 21330502sec mtu 1500 advmss 1440 hoplimit 4294967295
unreachable default dev lo table unspec proto none metric -1 error -101 hoplimit 255
local ::1 via :: dev lo table 255 proto none metric 0 mtu 16436 advmss 16376 hoplimit 4294967295
local fe80::219:21ff:fe71:1767 via :: dev lo table 255 proto none metric 0 mtu 16436 advmss 16376 hoplimit 4294967295
local fe80::250:56ff:fec0:1 via :: dev lo table 255 proto none metric 0 mtu 16436 advmss 16376 hoplimit 4294967295
local fe80::250:56ff:fec0:8 via :: dev lo table 255 proto none metric 0 mtu 16436 advmss 16376 hoplimit 4294967295
ff02::fb via ff02::fb dev eth0 metric 0
cache mtu 1500 advmss 1440 hoplimit 4294967295
ff00::/8 dev vmnet1 table 255 metric 256 expires 21323638sec mtu 1500 advmss 1440 hoplimit 4294967295
ff00::/8 dev vmnet8 table 255 metric 256 expires 21323638sec mtu 1500 advmss 1440 hoplimit 4294967295
ff00::/8 dev eth0 table 255 metric 256 expires 21330502sec mtu 1500 advmss 1440 hoplimit 4294967295
unreachable default dev lo table unspec proto none metric -1 error -101 hoplimit 255
[root@stu86 lianxi]# ip route show table main #我們通常查看main表
192.168.179.0/24 dev vmnet1 proto kernel scope link src 192.168.179.1
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.86
172.16.122.0/24 dev vmnet8 proto kernel scope link src 172.16.122.1
[root@stu86 lianxi]# ip route show table local #查看本地的路由表
broadcast 192.168.0.255 dev eth0 proto kernel scope link src 192.168.0.86
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 172.16.122.255 dev vmnet8 proto kernel scope link src 172.16.122.1
broadcast 192.168.179.255 dev vmnet1 proto kernel scope link src 192.168.179.1
broadcast 192.168.0.0 dev eth0 proto kernel scope link src 192.168.0.86
local 172.16.122.1 dev vmnet8 proto kernel scope host src 172.16.122.1
broadcast 172.16.122.0 dev vmnet8 proto kernel scope link src 172.16.122.1
broadcast 192.168.179.0 dev vmnet1 proto kernel scope link src 192.168.179.1
local 192.168.179.1 dev vmnet1 proto kernel scope host src 192.168.179.1
local 192.168.0.86 dev eth0 proto kernel scope host src 192.168.0.86
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
八、實(shí)驗(yàn)對(duì)標(biāo)記1走路由表1,標(biāo)記2走路由表2
定義策略路由表,通過策略屬性定義包的流向
1)添加2個(gè)表
[root@stu86 lianxi]# vim /etc/iproute2/rt_tables #定義有多少路由表
#
# reserved values
#
255 local
254 main #默認(rèn)查看的是main表
253 default
10 table1
20 table2
0 unspec #未定義
#
# local
#
#1 inr.ruhep
2)添加兩個(gè)轉(zhuǎn)發(fā)表項(xiàng),必須需要基于那條網(wǎng)段路由,才可以添加這個(gè)所在網(wǎng)段的默認(rèn)網(wǎng)關(guān)
[root@stu86 lianxi]# route add default dev eth0 gw 192.168.0.254 #需要基于mian表才可以添加下面的內(nèi)容
[root@stu86 lianxi]# ip route add table table1 192.168.0.0/24 dev eth0 #添加一個(gè)網(wǎng)段路由表交給eth0
[root@stu86 lianxi]# ip route add table table1 default dev eth0 via 192.168.0.254 #添加默認(rèn)網(wǎng)關(guān)為254
[root@stu86 lianxi]# ip route add table table2 10.0.0.0/8 dev eth1 #添加一個(gè)網(wǎng)段路由表交給eht1
[root@stu86 lianxi]# ip route add table default dev eth1 via 10.0.0.1 #添加默認(rèn)網(wǎng)關(guān)為1
[root@stu86 lianxi]# ip rule show #查看當(dāng)前默認(rèn)路由策略
0: from all lookup 255 #數(shù)越小優(yōu)先級(jí)越高,0 為最高
32766: from all lookup main
32767: from all lookup default
方法1。基于ip
添加ip查看那個(gè)路由表
[root@stu86 lianxi]# for count in `seq 1 100` ;do ip rule add from 192.168.0.$count table table1;done #為每個(gè)IP添加路由腳本規(guī)則
[root@stu86 lianxi]# for count in `seq 101 254` ;do ip rule add from 192.168.0.$count table table2;done #為每個(gè)IP添加路由腳本規(guī)則
[root@stu86 lianxi]# ip rule show
0: from all lookup 255
32512: from 192.168.0.254 lookup table2
方法2?;趆ash算法和防火墻標(biāo)記的
優(yōu)化問題:通過FBI(x)hash算法查詢。
我們可以把防火墻標(biāo)記效率更高
如下:
[root@stu86 lianxi]# ip rule add fwmark 1 (pref 1000) table table1
[root@stu86 lianxi]# ip rule add fwmark 2 (pref 2000) table table2
打標(biāo)記 ,需要在路由表前打標(biāo)記
[root@stu86 lianxi]# iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.0.1-192.168.0.100 -j MARK --set-mark 1 #標(biāo)記ip范圍
[root@stu86 lianxi]# iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.0.101-192.168.0.254 -j MARK --set-mark 2 #打標(biāo)記
九、通過添加一個(gè)網(wǎng)段的指定路由優(yōu)先級(jí)優(yōu)化路由的策略
目標(biāo)地址控制,上網(wǎng)
[root@stu86 lianxi]# ip ru sh
0: from all lookup 255
32764: from all fwmark 0x2 lookup table2
32765: from all fwmark 0x1 lookup table1
32766: from all lookup main
32767: from all lookup default
[root@stu86 lianxi]# ip rule del fwmark 1
[root@stu86 lianxi]# ip rule del fwmark 2
添加規(guī)則有順序,現(xiàn)允許部分,我們可以通過添加優(yōu)先級(jí)來改變規(guī)則的順序。
[root@stu86 lianxi]# ip rule add from 192.168.0.0/24 to 1.1.1.1 table table1 prio 1000 #添加192的網(wǎng)段走1。1。1。1使用table1表,優(yōu)先級(jí)為1000
[root@stu86 lianxi]# ip rule add table table2 prio 1100 #其他所有的使用table2表,優(yōu)先級(jí)為1100,相隔一定距離有利于以后添加規(guī)則
[root@stu86 lianxi]# ip rule show
0: from all lookup 255
1000: from 192.168.0.0/24 to 1.1.1.1 lookup table1
1100: from all lookup table2
32766: from all lookup main
32767: from all lookup default
十、多線接入
多線解決方案
[root@stu86 lianxi]# echo $[RANDOM%255+1].$[RANDOM%256].$[RANDOM%256].$[RANDOM%254+1] #產(chǎn)生隨即IP地址
[root@stu86 lianxi]# for i in `seq 1 1000`;do echo $[RANDOM%255+1].$[RANDOM%256].$[RANDOM%256].$[RANDOM%254+1];done > /tmp/tel.txt #產(chǎn)生一千個(gè)隨機(jī)IP地址
echo $[RANDOM]:取隨機(jī)值
echo $[RANDOM%255+1]:取隨值并且取模余運(yùn)算,這里是255,也就是余數(shù)范圍是從0開始到254結(jié)束一共255數(shù)字,這里加1目的防止ip地址第一位為0
優(yōu)先級(jí)映射問題:人多的地方優(yōu)化,使用人少的地方就算了
[root@stu86 lianxi]# sed 's/^.*$/cnc &/g' /tmp/cnc.txt >cnc.txt #給cnc文件打上標(biāo)記,是個(gè)替換路由腳本
[root@stu86 lianxi]# sed 's/^.*$/tel &/g' /tmp/tel.txt >tel.txt #給tel文件打上標(biāo)記,是個(gè)替換路由腳本
[root@stu86 lianxi]# cat cnc.txt >>tel.txt #文件合并
[root@stu86 lianxi]# sort -t. -k4 -n tel.txt >user.txt #以最后一個(gè)字段排序,并且顯示行號(hào)
[root@stu86 lianxi]# cat -n user.txt
路由腳本:
[root@stu86 lianxi]# cat cnctel.awk
#!/bin/awk -f
{
if ($2 ~ /cnc/) { #如果$2w為/cnc/的話,那么就使用table1表
system("ip ru add to "$3" ta table1 prio "$1);
} else {
system("ip ru add to "$3" ta table2 prio "$1); #如果不是/cnc/的話執(zhí)行tabla2表,$3為ip地址,$1是cat -n
} 的行號(hào)
}
[root@stu86 lianxi]#
[root@stu86 lianxi]# ./cnctel.awk user.txt #為user文本里面的ip集添加一個(gè)規(guī)則