Hadyai Internet R&D LAB
ผลงานของ Hadyai Internet R&D LAB => คุยกับทีมวิจัย => ข้อความที่เริ่มโดย: admin ที่ 20 กรกฎาคม 2008, 18:29:45
-
ตัวอย่างไฟล์ /etc/ppp/ip-up.d/0route
========================
#!/bin/bash
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
if [ -n "$ppp101" ]; then
# echo "ppp101 is up"
ip route add default table 101 dev ppp101
ip route add default table 201 dev ppp101
IPWAN=`ip addr show ppp101 |grep inet |cut -d " " -f 6`
ip rule del prio 201
ip rule add from $IPWAN lookup 201 prio 201
fi
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
if [ -n "$ppp102" ]; then
# echo "ppp102 is up"
ip route add default table 102 dev ppp102
ip route add default table 202 dev ppp102
IPWAN=`ip addr show ppp102 |grep inet |cut -d " " -f 6`
ip rule del prio 202
ip rule add from $IPWAN lookup 202 prio 202
fi
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
if [ -n "$ppp103" ]; then
# echo "ppp103 is up"
ip route add default table 103 dev ppp103
ip route add default table 203 dev ppp103
IPWAN=`ip addr show ppp103 |grep inet |cut -d " " -f 6`
ip rule del prio 203
ip rule add from $IPWAN lookup 203 prio 203
fi
if [ -n "$ppp102" ]; then
ip route del default
ip route del table 250 default
if [ -n "$ppp103" ]; then
# ppp102 up and ppp103 up
ip route add default equalize nexthop dev ppp102 weight 4 nexthop dev ppp103 weight 4
ip route add table 250 default equalize nexthop dev ppp102 weight 4 nexthop dev ppp103 weight 4
else
# ppp102 up and ppp103 down
ip route add default dev ppp102
ip route add table 250 default dev ppp102
fi
else
ip route del default
ip route del table 250 default
if [ -n "$ppp103" ]; then
# ppp102 down and ppp103 up
ip route add default dev ppp103
ip route add table 250 default dev ppp103
else
# ppp102 down and ppp103 down
ip route add default dev ppp101
ip route add table 250 default dev ppp101
fi
fi
ip route flush cache
================== end of file =================
-
ตัวอย่างไฟล์ /etc/init.d/checklink.sh
========================
#!/bin/sh
oldstatus=0
while [ 1 ]
do
status=0
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
if [ -n "$ppp101" ]; then
# echo "ppp101 is up"
status=`expr $status + 1`
fi
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
if [ -n "$ppp102" ]; then
# echo "ppp102 is up"
status=`expr $status + 2`
fi
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
if [ -n "$ppp103" ]; then
# echo "ppp103 is up"
status=`expr $status + 4`
fi
if [ $status != $oldstatus ]; then
/etc/ppp/ip-up.d/0route
/etc/ppp/ip-up.d/0nat
fi
oldstatus=$status
sleep 5
done
================== end of file =================
-
แล้วถ้า 4 wan 2 game 2 net net ทำ loadbalance กัน
เขียนแบบนี้ใช้งานได้ไหมครับ ชี้แนะด้วย
#!/bin/sh
oldstatus=0
while [ 1 ]
do
status=0
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
if [ -n "$ppp101" ]; then
# echo "ppp101 is up"
status=`expr $status + 1`
fi
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
if [ -n "$ppp102" ]; then
# echo "ppp102 is up"
status=`expr $status + 2`
fi
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
if [ -n "$ppp103" ]; then
# echo "ppp103 is up"
status=`expr $status + 4`
fi
ppp104=`/sbin/ifconfig -a | grep "ppp104"`
if [ -n "$ppp104" ]; then
# echo "ppp104 is up"
status=`expr $status + 8`
fi
if [ $status != $oldstatus ]; then
#/etc/ppp/ip-up.d/0route
if $status = 0 then
elif $status = 1 then
#use line 1
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
# echo "ppp101 is up"
ip route add default table 101 dev ppp101
ip route add default table 201 dev ppp101
IPWAN=`ip addr show ppp101 |grep inet |cut -d " " -f 6`
ip rule del prio 201
ip rule add from $IPWAN lookup 201 prio 201
elif $status = 2 then
#use line 2
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
# echo "ppp102 is up"
ip route add default table 102 dev ppp102
ip route add default table 202 dev ppp102
IPWAN=`ip addr show ppp102 |grep inet |cut -d " " -f 6`
ip rule del prio 202
ip rule add from $IPWAN lookup 202 prio 202
elif $status = 3 then
#use line 12
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
# echo "ppp101 is up"
ip route add default table 101 dev ppp101
ip route add default table 201 dev ppp101
IPWAN=`ip addr show ppp101 |grep inet |cut -d " " -f 6`
ip rule del prio 201
ip rule add from $IPWAN lookup 201 prio 201
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
# echo "ppp102 is up"
ip route add default table 102 dev ppp102
ip route add default table 202 dev ppp102
IPWAN=`ip addr show ppp102 |grep inet |cut -d " " -f 6`
ip rule del prio 202
ip rule add from $IPWAN lookup 202 prio 202
elif $status = 4 then
#use line 3
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
# echo "ppp103 is up"
ip route add default table 103 dev ppp103
ip route add default table 203 dev ppp103
IPWAN=`ip addr show ppp103 |grep inet |cut -d " " -f 6`
ip rule del prio 203
ip rule add from $IPWAN lookup 203 prio 203
elif $status = 5 then
#use line 13
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
# echo "ppp101 is up"
ip route add default table 101 dev ppp101
ip route add default table 201 dev ppp101
IPWAN=`ip addr show ppp101 |grep inet |cut -d " " -f 6`
ip rule del prio 201
ip rule add from $IPWAN lookup 201 prio 201
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
# echo "ppp103 is up"
ip route add default table 103 dev ppp103
ip route add default table 203 dev ppp103
IPWAN=`ip addr show ppp103 |grep inet |cut -d " " -f 6`
ip rule del prio 203
ip rule add from $IPWAN lookup 203 prio 203
elif $status = 6 then
#use line 2 and 3
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
# echo "ppp102 is up"
ip route add default table 102 dev ppp102
ip route add default table 202 dev ppp102
IPWAN=`ip addr show ppp102 |grep inet |cut -d " " -f 6`
ip rule del prio 202
ip rule add from $IPWAN lookup 202 prio 202
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
# echo "ppp103 is up"
ip route add default table 103 dev ppp103
ip route add default table 203 dev ppp103
IPWAN=`ip addr show ppp103 |grep inet |cut -d " " -f 6`
ip rule del prio 203
ip rule add from $IPWAN lookup 203 prio 203
elif $status = 7 then
#line 123
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
# echo "ppp101 is up"
ip route add default table 101 dev ppp101
ip route add default table 201 dev ppp101
IPWAN=`ip addr show ppp101 |grep inet |cut -d " " -f 6`
ip rule del prio 201
ip rule add from $IPWAN lookup 201 prio 201
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
# echo "ppp102 is up"
ip route add default table 102 dev ppp102
ip route add default table 202 dev ppp102
IPWAN=`ip addr show ppp102 |grep inet |cut -d " " -f 6`
ip rule del prio 202
ip rule add from $IPWAN lookup 202 prio 202
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
# echo "ppp103 is up"
ip route add default table 103 dev ppp103
ip route add default table 203 dev ppp103
IPWAN=`ip addr show ppp103 |grep inet |cut -d " " -f 6`
ip rule del prio 203
ip rule add from $IPWAN lookup 203 prio 203
elif $status = 8 then
#use line 4
ppp104=`/sbin/ifconfig -a | grep "ppp104"`
# echo "ppp104 is up"
ip route add default table 104 dev ppp104
ip route add default table 204 dev ppp104
IPWAN=`ip addr show ppp104 |grep inet |cut -d " " -f 6`
ip rule del prio 204
ip rule add from $IPWAN lookup 204 prio 204
elif $status = 9 then
#use line 1 and 4
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
# echo "ppp101 is up"
ip route add default table 101 dev ppp101
ip route add default table 201 dev ppp101
IPWAN=`ip addr show ppp101 |grep inet |cut -d " " -f 6`
ip rule del prio 201
ip rule add from $IPWAN lookup 201 prio 201
ppp104=`/sbin/ifconfig -a | grep "ppp104"`
# echo "ppp104 is up"
ip route add default table 104 dev ppp104
ip route add default table 204 dev ppp104
IPWAN=`ip addr show ppp104 |grep inet |cut -d " " -f 6`
ip rule del prio 204
ip rule add from $IPWAN lookup 204 prio 204
elif $status = 10 then
#use line 24
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
# echo "ppp102 is up"
ip route add default table 102 dev ppp102
ip route add default table 202 dev ppp102
IPWAN=`ip addr show ppp102 |grep inet |cut -d " " -f 6`
ip rule del prio 202
ip rule add from $IPWAN lookup 202 prio 202
ppp104=`/sbin/ifconfig -a | grep "ppp104"`
# echo "ppp104 is up"
ip route add default table 104 dev ppp104
ip route add default table 204 dev ppp104
IPWAN=`ip addr show ppp104 |grep inet |cut -d " " -f 6`
ip rule del prio 204
ip rule add from $IPWAN lookup 204 prio 204
elif $status = 11 then
#line 124
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
# echo "ppp101 is up"
ip route add default table 101 dev ppp101
ip route add default table 201 dev ppp101
IPWAN=`ip addr show ppp101 |grep inet |cut -d " " -f 6`
ip rule del prio 201
ip rule add from $IPWAN lookup 201 prio 201
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
# echo "ppp102 is up"
ip route add default table 102 dev ppp102
ip route add default table 202 dev ppp102
IPWAN=`ip addr show ppp102 |grep inet |cut -d " " -f 6`
ip rule del prio 202
ip rule add from $IPWAN lookup 202 prio 202
ppp104=`/sbin/ifconfig -a | grep "ppp104"`
# echo "ppp104 is up"
ip route add default table 104 dev ppp104
ip route add default table 204 dev ppp104
IPWAN=`ip addr show ppp104 |grep inet |cut -d " " -f 6`
ip rule del prio 204
ip rule add from $IPWAN lookup 204 prio 204
elif $status = 12 then
#use line 3 and 4
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
# echo "ppp103 is up"
ip route add default table 103 dev ppp103
ip route add default table 203 dev ppp103
IPWAN=`ip addr show ppp103 |grep inet |cut -d " " -f 6`
ip rule del prio 203
ip rule add from $IPWAN lookup 203 prio 203
ppp104=`/sbin/ifconfig -a | grep "ppp104"`
# echo "ppp104 is up"
ip route add default table 104 dev ppp104
ip route add default table 204 dev ppp104
IPWAN=`ip addr show ppp104 |grep inet |cut -d " " -f 6`
ip rule del prio 204
ip rule add from $IPWAN lookup 204 prio 204
elif $status = 13 then
#line 134
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
# echo "ppp101 is up"
ip route add default table 101 dev ppp101
ip route add default table 201 dev ppp101
IPWAN=`ip addr show ppp101 |grep inet |cut -d " " -f 6`
ip rule del prio 201
ip rule add from $IPWAN lookup 201 prio 201
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
# echo "ppp103 is up"
ip route add default table 103 dev ppp103
ip route add default table 203 dev ppp103
IPWAN=`ip addr show ppp103 |grep inet |cut -d " " -f 6`
ip rule del prio 203
ip rule add from $IPWAN lookup 203 prio 203
ppp104=`/sbin/ifconfig -a | grep "ppp104"`
# echo "ppp104 is up"
ip route add default table 104 dev ppp104
ip route add default table 204 dev ppp104
IPWAN=`ip addr show ppp104 |grep inet |cut -d " " -f 6`
ip rule del prio 204
ip rule add from $IPWAN lookup 204 prio 204
elif $status = 14 then
#line 234
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
# echo "ppp102 is up"
ip route add default table 102 dev ppp102
ip route add default table 202 dev ppp102
IPWAN=`ip addr show ppp102 |grep inet |cut -d " " -f 6`
ip rule del prio 202
ip rule add from $IPWAN lookup 202 prio 202
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
# echo "ppp103 is up"
ip route add default table 103 dev ppp103
ip route add default table 203 dev ppp103
IPWAN=`ip addr show ppp103 |grep inet |cut -d " " -f 6`
ip rule del prio 203
ip rule add from $IPWAN lookup 203 prio 203
ppp104=`/sbin/ifconfig -a | grep "ppp104"`
# echo "ppp104 is up"
ip route add default table 104 dev ppp104
ip route add default table 204 dev ppp104
IPWAN=`ip addr show ppp104 |grep inet |cut -d " " -f 6`
ip rule del prio 204
ip rule add from $IPWAN lookup 204 prio 204
elif $status = 15 then
#use all
ppp101=`/sbin/ifconfig -a | grep "ppp101"`
# echo "ppp101 is up"
ip route add default table 101 dev ppp101
ip route add default table 201 dev ppp101
IPWAN=`ip addr show ppp101 |grep inet |cut -d " " -f 6`
ip rule del prio 201
ip rule add from $IPWAN lookup 201 prio 201
ppp102=`/sbin/ifconfig -a | grep "ppp102"`
# echo "ppp102 is up"
ip route add default table 102 dev ppp102
ip route add default table 202 dev ppp102
IPWAN=`ip addr show ppp102 |grep inet |cut -d " " -f 6`
ip rule del prio 202
ip rule add from $IPWAN lookup 202 prio 202
ppp103=`/sbin/ifconfig -a | grep "ppp103"`
# echo "ppp103 is up"
ip route add default table 103 dev ppp103
ip route add default table 203 dev ppp103
IPWAN=`ip addr show ppp103 |grep inet |cut -d " " -f 6`
ip rule del prio 203
ip rule add from $IPWAN lookup 203 prio 203
ppp104=`/sbin/ifconfig -a | grep "ppp104"`
# echo "ppp104 is up"
ip route add default table 104 dev ppp104
ip route add default table 204 dev ppp104
IPWAN=`ip addr show ppp104 |grep inet |cut -d " " -f 6`
ip rule del prio 204
ip rule add from $IPWAN lookup 204 prio 204
fi
ip route flush cache
/etc/ppp/ip-up.d/0nat
fi
oldstatus=$status
sleep 5
done
#0000 0 none
#0001 1 line 1 only
#0010 2 line 2 only
#0011 3 line 1 and 2
#0100 4 line 3 only
#0101 5 line 1 and 3
#0110 6 line 2 and 3
#0111 7 line 1 2 and 3
#1000 8 line 4
#1001 9 line 1 and 4
#1010 10 line 2 and 4
#1011 11 line 1 2 and 4
#1100 12 line 3 and 4
#1101 13 line 1 3 and 4
#1110 14 line 2 3 and 4
#1111 15 all
-
ผมจะแยกไฟล์ 0nat และ 0route ไปไว้ใน /etc/ppp/ip-up.d/
เนื่องจากว่า ในกรณีที่มีการ up ของ interface ppp ไฟล์ที่อยู่ใน folder นี้จะถูกรันขึ้นมา
แต่จริง ๆ แล้ว ไฟล์ checklink.sh ก็คอยทำหน้าที่เช็คอยู่แล้วทุก ๆ 5 วินาที จะแยกหรือรวมกัน ก็แล้วแต่สะดวก
ในการเขียนสคิปนั้่น สิ่งสำคัญคือ ต้องมองถึงการใช้งานจริง วิฺธีการอาจจะไม่เหมือนกันในแต่ละท่าน
ผมยกตัวอย่างแนวคิดของผมนะครับ ในกรณี 4WAN , 2 WAN GAMES , 2 WAN NET
2 WAN GAMES ผมแบ่งดังนี้นะครับ
- WAN1 ให้เกมส์ค่าย Asiasoft (IP Bonus)
- WAN2 ให้เกมส์ค่าย TDE (iCafe Plus)
- WAN1 + WAN2 เกมส์ อื่น ๆ
2 WAN NETS ให้โหลดบาลานซ์กัน
- WAN3 + WAN4 NETS
ดังนั้น ในการ MARK เราจะต้อง MARK เป็น 4 Chain เป็นอย่างน้อย
- Chain Asiasoft Games = (AS_GAMES)
- Chain iCafe Plus Games = (ICAFE_GAMES)
- Chain Other Games = (OTHER_GAMES)
- Chain NET
ขั้นตอนการ MARK ก็ให้ MARK แบ่งตาม Service ให้ตรงกับ IP และ Port
ต่อไปขั้นตอนการสร้าง ROUTE TABLE
ก่อนอื่นก็ต้องสร้าง ROUTE TABLE ของ WAN ต่าง ๆ ตามปกติ
และสร้าง TABLES สำหรับโหลดบาลานซ์ 2WAN GAMES เช่นสร้างเป็น TABLE 250
และสร้าง TABLES สำหรับโหลดบาลานซ์ 2WAN NET เช่นสร้างเป็น TABLE 251
ขั้นตอนการสร้าง RULES
ก็กำหนดให้ Chain AS_GAMES วิ่ง ROUTE TABLE WAN1
กำหนดให้ Chain ICAFE_GAMES วิ่ง ROUTE TABLE WAN2
กำหนดให้ Chain OTHER_GAMES วิ่ง ROUTE TABLE 250
กำหนดให้ Chain NETS วิ่ง ROUTE TABLE 251
ขั้นตอนสุดท้าย การสร้าง Checklink Script
จะแบ่งกรณีได้เป็น 6 กรณี
1. เส้นเกมส์ ดาวน์ 1 เส้น ให้เกมส์เส้นที่ดาวน์ไปวิ่งเส้นเน็ต แล้วให้เน็ตวิ่ง 1 เส้น
2. เส้นเน็ต ดาวน์ 1 เส้น เกมส์วิ่ง 2 เส้นเหมือนเดิม เส้นเน็ตวิ่ง 1 เส้น
3. เส้นเกมส์ ดาวน์ 1 เส้น และ เส้นเวป ดาวน์ 1 เส้น ให้เกมส์ทั้งหมดวิ่งเส้นที่เหลือ ให้เวปทั้งหมดวิ่งเส้นที่เหลือ
4. เส้นเกมส์ ดาวน์ 2 เส้น ให้เกมส์ทั้งหมดวิ่ง 1 เส้น แล้วเน็ตวิ่ง 1 เส้น
5. เ้ส้นเน็ต ดาวน์ 2 เส้น ให้เกมส์ทั้งหมดวิ่ง 1 เส้น และเน็ตวิ่ง 1 เส้น
6. เน็ต 4 เส้น เหลือ เส้นเดียว ให้เกมส์และเวปวิ่งรวมเส้นเดียวกัน
นำกรณีเหล่านี้ ไปเขียนเป็น Script สำหรับเช็ค ROUTE TABLE เพื่อเปลี่ยนแปลง
ในไฟล์ชื่อ /etc/ppp/ip-up.d/0route
ลองนำไปคิดต่อดูครับ ไว้จะมาเขียนตัวอย่าง Script ให้ครับ
-
ขอบคุณครับ admin
เป็นแนวคิดที่ดี และครอบคลุมชัดเจนมากครับ ขอบคุณครับ
-
แจ่มมากครับ ท่าน admin
-
ขอบคุณครับ มีประโยชน์มากๆๆเลย ครับ
-
ถ้าเราทำการดังสายจาก router ออกมาเลย ตัว script ยังคงมองเห็น ค่าของ pppx อยู่ แต่จริงๆๆมันเล่นไม่ได้ แล้วอยากจะให้มัน flush เลยนี่จะทำได้มั้ยครับ เพราะว่า มันหลุดไปแล้วแต่ตัว connection มันยังค้างอยู่แล้ว script ก็ยังคงใช้งาน ในรูปแบบ ปกติอยู่นะครับ
-
ลองทดสอบดูครับ
ใช้คำสั่ง ip route show cache ก่อน
แล้วก็ใช้คำสั่ง ip route flush cache
รอสักครู่ แล้วใช้คำสั่ง ip route show cache ใหม่อีกที
จะเห็นการทำงานของ route cache อย่างชัดเจน
-
ได้ครับ เด๋วจะทำไว้ให้ download กันนะครับ