Mini Howto
Subject: การทำ IP Aliasing
By: Dome Potikanond <dome@ds90.intanon.nectec.or.th>
Date: Apr 5,1998
Update from: -
License: สงวนลิขสิทธิ์เอกสารนี้ โดย โดม โพธิกานนท์ <dome@ds90.intanon.nectec.or.th> การเผยแพร่เอกสารนี้จะต้องอยู่ภายไต้ เงื่อนไขของ GNU General Public License เวอร์ชั่น 2.0 ที่ออกโดย Free Sofware Foundation กรุฒาอ่านรายละเอียดของ GPL ที่ <http://linux.thai.net/gpl.html>
Introduction:
การอาศัยความสามารถของ IP Aliasing จะทำให้สามารถกำหนด IP address ได้หลายๆอันสำหรับ network interface เพียงอันเดียว(Lan Card หรือ Serial port เพียงอันเดียว) ซึ่งอาจใช้งานในการอาศัยเครื่องคอมพิวเตอร์ที่มีเพียง interface เพียงอันเดียวให้ทำตัวเป็น gateway ซึ่งจำเป็นต้องอาศัยหลาย
interface นั่นคือการกำหนด IP address ได้หลายเบอร์สำหรับ network interface เพียงอันเดียว

Prerequire:
1. ส่ิงที่จำเป็นต้องทำก่อนก็คือ การ make kernel ให้สนับสนุนการทำงานของ IP Aliasing ก่อนโดยการเข้าไปที่ diretory /usr/src/linux/ แล้วจึงสั่งให้
make kernel โดยใช้คำสั้ง make menuconfig แล้วจะปรากฎหน้าต่างดังรูป

lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq Main Menu qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Arrow keys navigate the menu. <Enter> selects submenus --->.            x
x Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes,   x
x <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help.       x
x Legend: [*] built-in [ ] excluded <M> module < > module capable         x
x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
x x Code maturity level options --->                                    x x
x x Loadable module support --->                                        x x
x x General setup --->                                                  x x
x x Floppy, IDE, and other block devices --->                           x x
x x Networking options --->                                             x x
x x SCSI support --->                                                   x x
x x Network device support --->                                         x x
x x ISDN subsystem --->                                                 x x
x x CD-ROM drivers (not for SCSI or IDE/ATAPI drives) --->              x x
x x Filesystems --->                                                    x x
x mqqqqqq.(+)qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
x                 <Select>   < Exit >   < Help >                          x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

ให้เลือกไปที่ Network device support ---> แล้วจะปรากฎหน้าต่างดังรูปต่อไปนี้

lqqqqqqqqqqqqqqqqqqqqqqqqqq Networking options qqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Arrow keys navigate the menu. <Enter> selects submenus --->.            x
x Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes,   x
x <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help.       x
x Legend: [*] built-in [ ] excluded <M> module < > module capable         x
x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
x x [ ] Network firewalls                                               x x
x x [*] Network aliasing                                                x x
x x [*] TCP/IP networking                                               x x
x x [ ] IP: forwarding/gatewaying                                       x x
x x [*] IP: multicasting                                                x x
x x [*] IP: syn cookies                                                 x x
x x [ ] IP: accounting                                                  x x
x x [ ] IP: optimize as router not host                                 x x
x x <M> IP: tunneling                                                   x x
x x <*> IP: aliasing support                                            x x
x mq.(+)qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
x                   <Select>    < Exit >      < Help >                    x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

จากนั้นให้เลือกไปที่ option Network aliasing ซึ่งจะทำให้ปรากฎรายลเอียดเกี่ยวกับ IP: aliasing support ขึ้นมาจึงเลื่อน cursor ไปที่บรรทัด
ดังกล่าวแล้วกด space bar ซึ่งจะทำให้ปรากฎ * ขึ้นที่บรรทัดดังกล่าว จากนั้นให้ save configuration แล้วจึงสั่งดังต่อไปนี้

bash# make dep
bash# make clean
bash# make zlilo

2. เครื่องที่จะทำ IP Aliasing ได้ต้องมี network interface อย่างน้อย 1 interface (ในที่นี้จะขอกล่าวถึง Lan Card เท่านั้น)
ซึ่งอาจจะต้อง make kernel ให้มองเห็น network interface ดังกล่าวด้วยถ้าในตอนแรกยังมองไม่เห็นโดยการ make kernel ต้องเลือกประเภท
ของ lan card ให้ถูกต้องด้วยว่าเครื่องของเราใส่ lan card ชนิดใด เช่น 3c5x9 หรือ ne2000
สำหรับการดูว่าเครื่องมี interface ใดบ้างทำได้โดยการใช้คำสั่ง ifconfig ซึ่งจะทำให้ปรากฎรายละเอียดของ interface ทั้งหมดที่เครื่องมีเช่น
bash# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:238 errors:0 dropped:0 overruns:0 frame:0
TX packets:238 errors:0 dropped:0 overruns:0 carrier:0 coll:0

eth0 Link encap:Ethernet HWaddr 00:80:C8:37:15:60
inet addr:202.44.248.93 Bcast:202.44.248.95 Mask:255.255.255.224
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14261 errors:0 dropped:0 overruns:0 frame:0
TX packets:5754 errors:0 dropped:0 overruns:0 carrier:0 coll:0
Interrupt:3 Base address:0x300
การใช้งาน IP Aliasing
1. การสร้าง interface ใหม่ให้เครื่องคอมพิวเตอร์(กำหนด ip address อีกหมายเลขหนึ่งแก่ lan card)
การสร้าง interface ใหม่ทำได้โดยการใช้ command line : ifconfig โดยมี syntax ดังนี้

bash# ifconfig [interface type] [ip address] [netmask]

สำหรับ interface type สามารถเลือกได้ว่าต้องการให้เป็น interface ตัวไหน และประเภทใด(lan card , serial)
เช่นถ้าเป็น lan card อาจกำหนดให้เป็น eth0:0 , eth0:1 ซึ่งต้องอ้างมาจาก interface ที่มีอยู่แล้วเท่านั้น(eth0)
สำหรับวิธีการอ้างมีตัวอย่างดังนี้

bash# ifconfig eth0:0 202.44.248.76 netmask 255.255.255.224

ซึ่งเมื่อทำการสร้าง interface ใหม่ให้เครื่องแล้วถ้าลองใช้คำสั่ง ifconfig เพื่อดูรายละเอียดเกี่ยวกับ interface ทั้งหมดของเครื่อง
จะปรากฎรายละเอียดดังนี้

bash# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:251 errors:0 dropped:0 overruns:0 frame:0
TX packets:251 errors:0 dropped:0 overruns:0 carrier:0 coll:0

eth0 Link encap:Ethernet HWaddr 00:80:C8:37:15:60
inet addr:202.44.248.93 Bcast:202.44.248.95 Mask:255.255.255.224
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14692 errors:0 dropped:0 overruns:0 frame:0
TX packets:5780 errors:0 dropped:0 overruns:0 carrier:0 coll:0
Interrupt:3 Base address:0x300

eth0:0 Link encap:Ethernet HWaddr 00:80:C8:37:15:60
inet addr:202.44.248.35 Bcast:202.44.248.63 Mask:255.255.255.224
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 coll:0

จะสังเกตุได้ว่าจะปรากฎ interface eth0:0 ขึ้นมาใหม่ซึ่งสามารถจะนำไปใช้งานได้จริง
หมายเหตุุ: สำหรับการกำหนด ip address สามารถกำหนดให้เป็น private ip address เพื่อใช้กันภายในองค์กรได้ แต่ถ้าต้องการให้
สามารถใช้งาน internet ได้ต้องมีการทำ IP Masquerading ด้วยซึ่งจะได้อธิบายในส่วนของ howto " IP_Masquerading.html"

2. การสร้าง routing table สำหรับ interface ใหม่
เมื่อมี interface ใหม่ปรากฎขั้นมาในระบบแล้ว ในตอนแรกอาจจะยังไม่สามารถใช้งานได้(ขึ้นอยู่กับ ip address และ netmask
ที่ได้กำหนดให้ interface ใหม่นั้นๆ)เพราะฉะนั้นควรตรวจสอบ routing table ก่อนโดยใช้คำสั่ง netstat -rn ดังตัวอย่าง

bash# netstat -rn
Kernel IP routing table
Destination   Gateway       Genmask         Flags MSS  Window  irtt    Iface
202.44.248.64 0.0.0.0       255.255.255.224 U     1500  0       0      eth0
127.0.0.0     0.0.0.0       255.0.0.0       U     3584  0       0      lo
0.0.0.0       202.44.248.68 0.0.0.0         UG    1500  0       0      eth0

จากตัวอย่าง interface ใหม่มี ip address และ netmask ที่ไม่ได้อยู่ในเน็ตเวิร์ค 202.44.248.64 แต่อยู่ในเน็ตเวิร์ค 202.44.248.32
ดังนัั้นต้องทำการเพิ่มบรรทัดใหม่เข้าไปใน routing table ดังตัวอย่างเพื่อให้เครื่องนี้สามารถติดต่่อกับเน็ตเวิร์ค 202.44.248.32 ได้โดยตรง โดย
โดยไม่จำเป็นต้องไปผ่าน gateway 202.44.248.68 โดยการเพิ่มบรรทัดทำได้โดยใช้คำสั่ง route ดังต่อไปนี้

bash# route add [-net(network ip)/-host(host ip)] gw [gateway ip] netmask [ip netmask] metric [hop]

วิธีการเพิ่มบรรทัดใน routing table นั้นทำได้โดยคำสั่งดังนี้

bash# route add -net 202.44.248.32 gw 202.44.248.35
bash# netstat -rn
Kernel IP routing table
Destination   Gateway       Genmask         Flags MSS  Window  irtt    Iface
202.44.248.64 0.0.0.0       255.255.255.224 U     1500  0       0      eth0
202.44.248.32 0.0.0.0       255.255.255.224 U     1500  0       0      eth0:0
127.0.0.0     0.0.0.0       255.0.0.0       U     3584  0       0      lo
0.0.0.0       202.44.248.68 0.0.0.0         UG    1500  0       0      eth0

เมื่อลองกลับไปดู routing table ใหม่จะปรากฎบรรทัดใหม่ดังตัวอย่าง แล้วจึงทดลอง traceroute ไปที่เครื่องที่มี ip address อื่นๆที่
อยู่ใน network 202.44.248.32 (โดยควรจะลบบรรทัดสุดท้ายของ routing table ตามตัวอย่างออกก่อนเพื่อตรวจสอบว่า interface ใหม่
ที่สร้างขึ้นมาใช้งานได้จริงหรือไม่) ถ้าไปได้โดยผ่าน gateway ip 202.44.248.35 แสดงว่าใช้งานได้จริงๆแล้วเป็นอันว่าเสร็จเรียบร้อย

3. การกำหนดให้สร้าง interface เมื่อมีการ boot เครื่อง
เมื่อมีการ boot เครื่องใหม่โดยปกติ interface ใหม่ที่สร้างขึ้นมาจะหายไปเสมอเพราะฉะนั้นจึงควรกำหนดให้เครื่องสร้าง interface
ใหม่ดังกล่าวขึ้นมาเสมอทุกครั้งที่มีการ boot เครื่่องโดยที่สามารกทำได้โดยไปเพิ่มบรรทัดใหม่ลงในไฟล์ /etc/rc.d/rc.inet1 โดยจากตัวอย่าง
เพิ่มดังต่อไปนี้

/sbin/ifconfig eth0:0 202.44.248.35 netmask 255.255.255.224 broadcast 202.44.248.63
/sbin/route add -net 202.44.248.32 netmask 255.255.255.224 gw 202.44.248.35 metric 1

หลังจากนี้เมื่อมีการ boot เครื่องใหม่จะมีการสร้าง interface eth0:0 พร้อมทั้งเพิ่ม routing ที่สัมพันธ์กับ interface ดังกล่าวเสมอ