ข่าว: ข่าวประกาศ

  • 25 พฤศจิกายน 2024, 00:28:02

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ผู้เขียน หัวข้อ: บทเรียนเรื่องการสร้าง MultiWAN ด้วย Ubuntu  (อ่าน 37214 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
บทเรียนเรื่องการสร้าง MultiWAN ด้วย Ubuntu
« เมื่อ: 07 กรกฎาคม 2008, 14:48:56 »

จากรูปจะเห็นว่า Server ประกอบด้วย 3 Interface คือ eth0, eth1, และ eth2 ตามลำดับ

กำหนดให้ eth0 เป็น LAN Interface
กำหนดให้ eth1 เป็น WAN1 Interface เชื่อมต่ออินเตอร์เน็ตผ่าน ppp101
กำหนดให้ eth2 เป็น WAN2 Interface เชื่อมต่ออินเตอร์เน็ตผ่าน ppp102

หลักการทำงานของ MultiWAN นั้นประกอบด้วย 3 ส่วนหลัก ๆ คือ

1. การ Mark Packet
2. การกำหนด rule
3. การสร้าง route table

กรณี Packet จากวิ่งจาก LAN ไป WAN จะได้ว่า

LAN ---> MARK 0x101 --> ip rule from all fwmark 0x101 lookup 101 --> ip route add table 101 default dev ppp101 ---> WAN1

หรือ

LAN ---> MARK 0x102 --> ip rule from all fwmark 0x102 lookup 102 --> ip route add table 102 default dev ppp102 ---> WAN2

หรือในกรณีให้วิ่งออกทั้ง 2 WAN

LAN ---> MARK 0x250 --> ip rule from all fwmark 0x250 lookup 250 --> ip route add table 250 default equalize nexthop dev ppp101 weight 1 nexthop dev ppp102 weight 1 ---> WAN1/WAN2

กรณีจาก WAN วิ่งเข้ามายัง LAN จะต้องทำการ MARK ว่ามาจาก WAN ไหน เวลาส่งข้อมูลกลับ จะได้วิ่งออกทาง WAN เดิม ถ้าหากออกไม่ตรง WAN เดิมจะทำให้ไม่สามารถเชื่อมต่อได้

ในการ Mark ว่ามาจาก WAN ไหนนั้น ก็ใช้คำสั่ง

iptables -A INPUT -t mangle -i ppp101 -j CONNMARK --set-mark 0x101
iptables -A INPUT -t mangle -i ppp102 -j CONNMARK --set-mark 0x102


การเดินทางของ Packet จะได้ว่า จะมองเป็น Connection ที่เกิดการเชื่อมต่อ

WAN1 ---> CONNMARK 0x101 --> LAN --> Client --> LAN --> state RELATED,ESTABLISHED restore CONNMARK 0x101 --> ip rule from all fwmark 0x101 lookup 101 --> ip route add table 101 default dev ppp101 ---> WAN1

WAN2 ---> CONNMARK 0x102 --> LAN --> Client --> LAN --> state RELATED,ESTABLISHED restore CONNMARK 0x102 --> ip rule from all fwmark 0x102 lookup 102 --> ip route add table 102 default dev ppp102 ---> WAN2

กรณีต่อไปคือ กรณีที่ WAN เชื่อมต่อมายัง Server มาทาง WAN ไหน ก็ต้องออกทาง WAN นั้นเช่นเดียวกัน

Server --> ip rule from IPWAN1 lookup 201 --> ip route add table 201 default dev ppp101 --> WAN1

Server --> ip rule from IPWAN2 lookup 202 --> ip route add table 202 default dev ppp102 --> WAN2

กรณีต่อไปก็คือ กรณีที่ จาก LAN วิ่งไปยัง Server แล้วให้ Server ทำการเชื่อมต่อภายนอก ในกรณีที่เป็น Web Proxy, Frox เป็นต้น

จะต้องทำการ Mark Output ด้วยคำสั่ง

iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 0x102

การเดินทางของ Packet ก็จะได้ว่า

Server --> Output Mark 0x102 --> ip rule from all fwmark 0x102 lookup 102 --> ip route add table 102 default dev ppp102 ---> WAN2

« แก้ไขครั้งสุดท้าย: 07 กรกฎาคม 2008, 17:05:49 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Re: บทเรียนเรื่องการสร้าง MultiWAN ด้วย Ubuntu
« ตอบกลับ #1 เมื่อ: 07 กรกฎาคม 2008, 16:08:48 »
LAB การทดลองเพื่อทดสอบความเข้าใจเรื่อง MultiWAN การ Mark การกำหนด rule และการกำหนด route

ขั้นตอนแรก ให้ทำการบันทึกค่าปิงของ WAN1 และ WAN2 (ถ้า Internet คนละ ISP หรือคนละ Speed จะทำให้เข้าใจง่าย)

โดยใช้คำสั่ง

ตรวจเช็คความเร็วของเส้นแรก
ping -I ppp101 -c 5 203.150.217.1 แล้วทำการจดบันทึกค่า time ที่ได้
ping -I ppp101 -c 5 203.144.244.1 แล้วทำการจดบันทึกค่า time ที่ได้

ตรวจเช็คความเร็วของเส้นที่สอง
ping -I ppp102 -c 5 203.150.217.1 แล้วทำการจดบันทึกค่า time ที่ได้
ping -I ppp102 -c 5 203.144.244.1 แล้วทำการจดบันทึกค่า time ที่ได้

ทำการปิงโดยไม่มีการกำหนดเส้น
ping -c 5 203.150.217.1 แล้วทำการจดบันทึกค่า time ที่ได้
ping -c 5 203.144.244.1 แล้วทำการจดบันทึกค่า time ที่ได้

ทำการตรวจสอบ default route ด้วยการพิมพ์คำสั่ง ip route แล้วจดบันทึกค่า default route บรรทัดสุดท้าย

ทำการ MARK Packet ping ออกเป็น 2 ชุดดังนี้
iptables -A OUTPUT -t mangle -p icmp -d 203.150.217.1 -j MARK --set-mark 0x111
iptables -A OUTPUT -t mangle -p icmp -d 203.144.244.1 -j MARK --set-mark 0x222

ทำการสร้าง ip rule ขึ้นมา
ip rule add fwmark 0x111 lookup 111
ip rule add fwmark 0x222 lookup 222

ทำการสร้าง route table ขึ้นมา
ip route add table 111 default dev ppp101
ip route add table 222 default dev ppp102

ทำการปิงโดยไม่มีการกำหนดเส้น
ping -c 5 203.150.217.1 แล้วทำการจดบันทึกค่า time ที่ได้
ping -c 5 203.144.244.1 แล้วทำการจดบันทึกค่า time ที่ได้

ทำการเปลี่ยน route table ดังนี้
ip route rep table 222 default dev ppp101

ทำการปิงโดยไม่มีการกำหนดเส้น
ping -c 5 203.150.217.1 แล้วทำการจดบันทึกค่า time ที่ได้
ping -c 5 203.144.244.1 แล้วทำการจดบันทึกค่า time ที่ได้

ทำการเปลี่ยน route table ดังนี้
ip route rep table 111 default dev ppp102

ทำการปิงโดยไม่มีการกำหนดเส้น
ping -c 5 203.150.217.1 แล้วทำการจดบันทึกค่า time ที่ได้
ping -c 5 203.144.244.1 แล้วทำการจดบันทึกค่า time ที่ได้

เสร็จแล้ว ลองทบทวนความเข้าใจดูครับ ว่าทำไมผลถึงออกมาเป็นเช่นนั้น
« แก้ไขครั้งสุดท้าย: 07 กรกฎาคม 2008, 16:51:44 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Re: บทเรียนเรื่องการสร้าง MultiWAN ด้วย Ubuntu
« ตอบกลับ #2 เมื่อ: 07 กรกฎาคม 2008, 16:13:44 »
ตัวอย่างผลการทดลองด้านบน

root@ubuntu:~# ping -I ppp101 -c 5 203.150.217.1
PING 203.150.217.1 (203.150.217.1) from 58.9.4.134 ppp101: 56(84) bytes of data.
64 bytes from 203.150.217.1: icmp_seq=1 ttl=119 time=20.7 ms
64 bytes from 203.150.217.1: icmp_seq=2 ttl=119 time=20.4 ms
64 bytes from 203.150.217.1: icmp_seq=3 ttl=119 time=21.3 ms
64 bytes from 203.150.217.1: icmp_seq=4 ttl=119 time=20.6 ms
64 bytes from 203.150.217.1: icmp_seq=5 ttl=119 time=20.3 ms

--- 203.150.217.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3996ms
rtt min/avg/max/mdev = 20.388/20.735/21.378/0.380 ms
root@ubuntu:~# ping -I ppp101 -c 5 203.144.244.1
PING 203.144.244.1 (203.144.244.1) from 58.9.4.134 ppp101: 56(84) bytes of data.
64 bytes from 203.144.244.1: icmp_seq=1 ttl=249 time=21.5 ms
64 bytes from 203.144.244.1: icmp_seq=2 ttl=249 time=20.6 ms
64 bytes from 203.144.244.1: icmp_seq=3 ttl=249 time=20.5 ms
64 bytes from 203.144.244.1: icmp_seq=4 ttl=249 time=20.7 ms
64 bytes from 203.144.244.1: icmp_seq=5 ttl=249 time=21.2 ms

--- 203.144.244.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 20.545/20.951/21.564/0.417 ms
root@ubuntu:~# ping -I ppp102 -c 5 203.150.217.1
PING 203.150.217.1 (203.150.217.1) from 58.136.75.122 ppp102: 56(84) bytes of data.
64 bytes from 203.150.217.1: icmp_seq=1 ttl=121 time=12.1 ms
64 bytes from 203.150.217.1: icmp_seq=2 ttl=121 time=9.95 ms
64 bytes from 203.150.217.1: icmp_seq=3 ttl=121 time=10.3 ms
64 bytes from 203.150.217.1: icmp_seq=4 ttl=121 time=9.93 ms
64 bytes from 203.150.217.1: icmp_seq=5 ttl=121 time=10.1 ms

--- 203.150.217.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 9.937/10.514/12.169/0.850 ms
root@ubuntu:~# ping -I ppp102 -c 5 203.144.244.1
PING 203.144.244.1 (203.144.244.1) from 58.136.75.122 ppp102: 56(84) bytes of data.
64 bytes from 203.144.244.1: icmp_seq=1 ttl=248 time=12.4 ms
64 bytes from 203.144.244.1: icmp_seq=2 ttl=248 time=11.4 ms
64 bytes from 203.144.244.1: icmp_seq=3 ttl=248 time=11.4 ms
64 bytes from 203.144.244.1: icmp_seq=4 ttl=248 time=11.3 ms
64 bytes from 203.144.244.1: icmp_seq=5 ttl=248 time=12.0 ms

--- 203.144.244.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3997ms
rtt min/avg/max/mdev = 11.315/11.728/12.419/0.422 ms
root@ubuntu:~# ping -c 5 203.150.217.1
PING 203.150.217.1 (203.150.217.1) 56(84) bytes of data.
64 bytes from 203.150.217.1: icmp_seq=1 ttl=121 time=15.0 ms
64 bytes from 203.150.217.1: icmp_seq=2 ttl=121 time=10.9 ms
64 bytes from 203.150.217.1: icmp_seq=3 ttl=121 time=10.1 ms
64 bytes from 203.150.217.1: icmp_seq=4 ttl=121 time=10.9 ms
64 bytes from 203.150.217.1: icmp_seq=5 ttl=121 time=10.2 ms

--- 203.150.217.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3997ms
rtt min/avg/max/mdev = 10.173/11.482/15.083/1.833 ms
root@ubuntu:~# ping -c 5 203.144.244.1
PING 203.144.244.1 (203.144.244.1) 56(84) bytes of data.
64 bytes from 203.144.244.1: icmp_seq=1 ttl=248 time=15.6 ms
64 bytes from 203.144.244.1: icmp_seq=2 ttl=248 time=11.1 ms
64 bytes from 203.144.244.1: icmp_seq=3 ttl=248 time=11.5 ms
64 bytes from 203.144.244.1: icmp_seq=4 ttl=248 time=11.0 ms
64 bytes from 203.144.244.1: icmp_seq=5 ttl=248 time=11.2 ms

--- 203.144.244.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 11.039/12.131/15.627/1.758 ms
root@ubuntu:~# ip route
210.1.48.12 dev ppp102  proto kernel  scope link  src 58.136.75.122
58.9.4.1 dev ppp101  proto kernel  scope link  src 58.9.4.134
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.254
default dev ppp102  scope link
root@ubuntu:~#

จากผลการทดลองแรก จะได้ว่า
ปิงผ่าน ppp101 ความเร็วประมาณ 20ms
ปิงผ่าน ppp102 ความเร็วประมาณ 10ms
ถ้าปิงแบบไม่มีการกำหนด จะได้ความเร็ว 10ms
เนื่องจากว่า default route ได้กำหนด ไว้เป็น ppp102
« แก้ไขครั้งสุดท้าย: 07 กรกฎาคม 2008, 22:46:13 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Re: บทเรียนเรื่องการสร้าง MultiWAN ด้วย Ubuntu
« ตอบกลับ #3 เมื่อ: 07 กรกฎาคม 2008, 16:24:03 »
ผลการทดลองต่อมา

ทำการพิมพ์คำสั่งตามลำดับ

root@ubuntu:~# iptables -A OUTPUT -t mangle -p icmp -d 203.150.217.1 -j MARK --set-mark 0x111
root@ubuntu:~# iptables -A OUTPUT -t mangle -p icmp -d 203.144.244.1 -j MARK --set-mark 0x222

กำหนดให้ปิง 203.150.217.1 ถูก Mark ด้วยค่า 0x111
กำหนดให้ปิง 203.144.244.1 ถูก Mark ด้วยค่า 0x222


root@ubuntu:~# ip rule add fwmark 0x111 lookup 111
root@ubuntu:~# ip rule add fwmark 0x222 lookup 222

กำหนดให้ packet ที่ถูก Mark ด้วยค่า 0x111 วิ่งออกทาง route table 111
กำหนดให้ packet ที่ถูก Mark ด้วยค่า 0x222 วิ่งออกทาง route table 222


root@ubuntu:~# ip route add table 111 default dev ppp101
root@ubuntu:~# ip route add table 222 default dev ppp102

กำหนดให้ route table 111 วิ่งออกทาง ppp101
กำหนดให้ route table 222 วิ่งออกทาง ppp102


root@ubuntu:~# ping -c 5 203.150.217.1
PING 203.150.217.1 (203.150.217.1) 56(84) bytes of data.
64 bytes from 203.150.217.1: icmp_seq=1 ttl=119 time=21.4 ms
64 bytes from 203.150.217.1: icmp_seq=2 ttl=119 time=20.3 ms
64 bytes from 203.150.217.1: icmp_seq=3 ttl=119 time=21.2 ms
64 bytes from 203.150.217.1: icmp_seq=4 ttl=119 time=21.3 ms
64 bytes from 203.150.217.1: icmp_seq=5 ttl=119 time=21.3 ms

--- 203.150.217.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3996ms
rtt min/avg/max/mdev = 20.374/21.163/21.461/0.409 ms
root@ubuntu:~# ping -c 5 203.144.244.1
PING 203.144.244.1 (203.144.244.1) 56(84) bytes of data.
64 bytes from 203.144.244.1: icmp_seq=1 ttl=248 time=13.0 ms
64 bytes from 203.144.244.1: icmp_seq=2 ttl=248 time=12.8 ms
64 bytes from 203.144.244.1: icmp_seq=3 ttl=248 time=11.3 ms
64 bytes from 203.144.244.1: icmp_seq=4 ttl=248 time=11.3 ms
64 bytes from 203.144.244.1: icmp_seq=5 ttl=248 time=11.8 ms

--- 203.144.244.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 11.327/12.088/13.070/0.736 ms

เมื่อทำการปิงจะเห็นว่า เมื่อปิง 203.150.217.1 จะได้ค่าปิง 20ms แสดงว่าข้อมูลวิ่งออกทาง ppp101
เมื่อทำการปิง 203.144.244.1 จะได้ค่าปิง 10ms แสดงว่าข้อมูลวิ่งออกทาง ppp102
ซึ่งตรงกับที่เราได้สร้างไว้


root@ubuntu:~# ip route rep table 222 default dev ppp101

ทดสอบทำการเปลี่ยน route table 222 ให้ออกทาง ppp101 แทน
นั่นแสดงว่า เมื่อปิง 203.144.244.1 จะต้องได้ 20ms
ส่วนค่าปิง 203.150.217.1 ก็คงยังเหมือนเดิม คือได้ 20ms เพราะไม่มีการเปลี่ยนแปลงอะไร


root@ubuntu:~# ping -c 5 203.150.217.1
PING 203.150.217.1 (203.150.217.1) 56(84) bytes of data.
64 bytes from 203.150.217.1: icmp_seq=1 ttl=119 time=20.8 ms
64 bytes from 203.150.217.1: icmp_seq=2 ttl=119 time=20.9 ms
64 bytes from 203.150.217.1: icmp_seq=3 ttl=119 time=20.6 ms
64 bytes from 203.150.217.1: icmp_seq=4 ttl=119 time=20.7 ms
64 bytes from 203.150.217.1: icmp_seq=5 ttl=119 time=20.8 ms

--- 203.150.217.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3996ms
rtt min/avg/max/mdev = 20.612/20.793/20.926/0.107 ms
root@ubuntu:~# ping -c 5 203.144.244.1
PING 203.144.244.1 (203.144.244.1) 56(84) bytes of data.
64 bytes from 203.144.244.1: icmp_seq=1 ttl=249 time=34.1 ms
64 bytes from 203.144.244.1: icmp_seq=2 ttl=249 time=21.7 ms
64 bytes from 203.144.244.1: icmp_seq=3 ttl=249 time=20.4 ms
64 bytes from 203.144.244.1: icmp_seq=4 ttl=249 time=22.4 ms
64 bytes from 203.144.244.1: icmp_seq=5 ttl=249 time=22.3 ms

--- 203.144.244.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 20.416/24.217/34.158/5.023 ms

root@ubuntu:~# ip route rep table 111 default dev ppp102

ทำการเปลี่ยน route table 111 บ้าง แล้วดูผลการเปลี่ยนแปลง

root@ubuntu:~# ping -c 5 203.150.217.1
PING 203.150.217.1 (203.150.217.1) 56(84) bytes of data.
64 bytes from 203.150.217.1: icmp_seq=1 ttl=121 time=11.6 ms
64 bytes from 203.150.217.1: icmp_seq=2 ttl=121 time=10.7 ms
64 bytes from 203.150.217.1: icmp_seq=3 ttl=121 time=9.92 ms
64 bytes from 203.150.217.1: icmp_seq=4 ttl=121 time=10.6 ms
64 bytes from 203.150.217.1: icmp_seq=5 ttl=121 time=9.85 ms

--- 203.150.217.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 9.855/10.552/11.626/0.655 ms
64 bytes from 203.144.244.1: icmp_seq=1 ttl=249 time=21.5 ms
64 bytes from 203.144.244.1: icmp_seq=2 ttl=249 time=21.2 ms
64 bytes from 203.144.244.1: icmp_seq=3 ttl=249 time=21.5 ms
64 bytes from 203.144.244.1: icmp_seq=4 ttl=249 time=21.4 ms
64 bytes from 203.144.244.1: icmp_seq=5 ttl=249 time=21.1 ms

--- 203.144.244.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3996ms
rtt min/avg/max/mdev = 21.160/21.409/21.592/0.230 ms
root@ubuntu:~#

นำไปศึกษากันต่อดูนะครับ
« แก้ไขครั้งสุดท้าย: 07 กรกฎาคม 2008, 16:48:10 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>