ผมมี server สำหรับห้องบริการคอมพิวเตอร์ ที่ทำหน้าที่จ่าย dhcp IP และ cloning Windows และใช้ pGina for Windows ในการ Login ก่อนเข้าใช้เครื่อง
เริ่มแรก server ก็มีการ์ดแลนเพียง 1 ใบ สำหรับห้องบริการคอมพิวเตอร์ห้องที่ 1 (eth0) ต่อมามีความต้องการให้ห้องบริการคอมพิวเตอร์ห้องที่ 2 ซึ่งจะเป็นอีก network ใช้ server ตัวเดียวกันนี้ด้วย จึงเพิ่มการ์ดแลนอีก 1 ใบ (eth1) ทำให้ตอนนี้มี eth0 และ eth1
ปัญหาคือ เมื่อ Windows ในห้องคอมฯ ห้องที่ 2 ตั้งค่า pGina RADIUS plugin ชี้ไปยัง IP ของ eth0 (192.168.99.20) ก็ทำงานไม่ได้ แต่ถ้าตั้งค่าชี้ไปยัง IP ของ eth1 (192.168.99.251) อย่างนี้ใช้งานได้ หรือใช้คำสั่ง ping 192.168.99.20 อย่างนี้ก็ไม่ได้ เช่นกัน
จึงค้นหาคำตอบ google search อยู่หลายวัน มีบทความที่ให้คำตอบใกล้เคียงที่สุด แต่ผมก็ต้องมาแต่ง config ใหม่ จนสำเร็จ โดยหลักใหญ่ ๆ คือ เครื่อง server ที่มีการ์ดแลน 2 การ์ดนี้จะเรียกว่า multi-homed server จำเป็นจะต้องตั้งค่าเพิ่มโดยใช้ iproute2 ซึ่งมีให้แล้วบน ubuntu server ที่ผมทดสอบนี้คือ ubuntu server 16.04 ครับ คือ ปรกติแล้วเครื่อง 1 เครื่อง จะมี default gateway เพียง 1 เท่านั้น เราจะใช้ iproute2 เพื่อแยกให้มี gateway สำหรับ IP ของ eth0 และ eth1 เพิ่มขึ้น
เรามาดูตัวอย่างกันครับ
เครื่องที่ทดสอบ มี 2 subnets (อันนี้ที่ต้องใช้ /25 เพราะผมไม่มี net class C ถึง 2 net จึงไปขอความช่วยเหลือทีมเครือข่ายให้ช่วยแบ่งครึ่ง net class C ให้ครับ)
1. net 192.168.99.0/25
IP 192.168.99.1 – 192.168.99.126 broadcast 192.168.99.127 gateway 192.168.99.1
2. net 192.168.99.128/25
IP 192.168.99.129 – 192.168.99.254 broadcast 192.168.99.255 gateway 192.168.99.129
1. ตรวจสอบ network interfaces ได้ผลลัพธ์ดังนี้
root@ubuntu:~# ifconfig eth0 Link encap:Ethernet HWaddr 00:4d:60:1e:fb:ab inet addr:192.168.99.20 Bcast:192.168.99.127 Mask:255.255.255.128 eth1 Link encap:Ethernet HWaddr 00:04:a5:fd:a4:9c inet addr:192.168.99.251 Bcast:192.168.99.255 Mask:255.255.255.128 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0
2. เพิ่ม 2 บรรทัดนี้ต่อท้ายในไฟล์ /etc/iproute2/rt_tables (ผมตั้งชื่อ routing table 1 ว่า rt1 และ routing table 2 ว่า rt2)
1 rt1 2 rt2
ผลลัพธ์ได้ดังนี้
root@ubuntu:~# cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 rt1 2 rt2
3. เพิ่ม 4 บรรทัดนี้สำหรับ eth0
post-up ip route add 192.168.99.0/25 dev eth0 src 192.168.99.20 table rt1 post-up ip route add default via 192.168.99.1 dev eth0 table rt1 post-up ip rule add from 192.168.99.20/32 table rt1 post-up ip rule add to 192.168.99.20/32 table rt1
4. และเพิ่ม 4 บรรทัดนี้สำหรับ eth1 post-up ip route add 192.168.99.128/25 dev eth1 src 192.168.99.251 table rt2 post-up ip route add default via 192.168.99.129 dev eth1 table rt2 post-up ip rule add from 192.168.99.251/32 table rt2 post-up ip rule add to 192.168.99.251/32 table rt2
จากข้อ 3 และ ข้อ 4 ผลลัพธ์ได้ดังนี้
root@ubuntu:~# cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.99.20 netmask 255.255.255.128 gateway 192.168.99.1 dns-nameservers 192.100.77.10 192.100.77.11 post-up ip route add 192.168.99.0/25 dev eth0 src 192.168.99.20 table rt1 post-up ip route add default via 192.168.99.1 dev eth0 table rt1 post-up ip rule add from 192.168.99.20/32 table rt1 post-up ip rule add to 192.168.99.20/32 table rt1 auto eth1 iface eth1 inet static address 192.168.99.251 netmask 255.255.255.128 post-up ip route add 192.168.99.128/25 dev eth1 src 192.168.99.251 table rt2 post-up ip route add default via 192.168.99.129 dev eth1 table rt2 post-up ip rule add from 192.168.99.251/32 table rt2 post-up ip rule add to 192.168.99.251/32 table rt2
5. ทำการ restart server
แค่นี้ครับ
References:
1. Two Default Gateways on One System
(URL https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System)
2. Linux iproute2 multiple default gateways
(URL https://www.iodigitalsec.com/2014/10/05/linux-iproute2-multiple-default-gateways/)
3. Number of IP Addresses and Multihoming
(URL http://www.tcpipguide.com/free/t_NumberofIPAddressesandMultihoming.htm)