Friday, November 28, 2008

ทำ Linux ให้เป็น router server

เนื่องจากว่า ผมมี Project ต้องทำงานกับเครื่องในวง LAN ที่มีอยู่ประมาณ 5 เครื่อง เพื่อให้ออกเนต แต่เนื่องจากว่า ผมมี IP ออกเนต แค่ IP เดียว แถมยัง ไม่มี router ด้วย แต่ผมมี Linux server อยู่เครื่องนึง ที่มี card LAN 2 ใบ ก็เลยจะลองทำ Router server จาก Linux ดู

รายละเอียดของ IP มีดังนี้
























ComputerInterfaceIPNetmaskGateway
Servereth069.24.45.45255.255.255.24869.24.45.41
Servereth1192.168.10.1255.255.255.0---
Client1eth0192.168.10.11255.255.255.0192.168.10.1
Client2eth0192.168.10.12255.255.255.0192.168.10.1
Client3eth0192.168.10.13255.255.255.0192.168.10.1
Client4eth0192.168.10.14255.255.255.0192.168.10.1
Client5eth0192.168.10.15255.255.255.0192.168.10.1


Server OS Fedora core 8 ลงแบบ Text mode ไม่เลือก package

Client OS Windows หรือ Linux ก็ได้

หลังจากลงแล้ว ให้ fix IP ของ server ตามรายละเอียดด้านบน จากนั้นทดสอบว่า Server สามารถออกไปยัง Internet ได้หรือไม่ โดยการลอง ping web ดู เช่น ping www.google.com ถ้า ping ได้ แสดงว่า config ถูกต้อง และพร้อมจะทำขั้นตอนต่อไป ถ้า ping ไม่เจอให้ตรวจสอบ LAN interface ว่า เราเสียบสาย lan ผิดข้างหรือเปล่า เมื่อแก้ไขแล้วลอง ping อีกครั้ง

ที่ client ให้ fix ip ตามที่ระบุไว้ด้านบนเช่นกัน จากนั้น ทดสอบว่า สามารถติดต่อกับขา eth1 ของ server ได้หรือไม่ โดยการ ping ไปที่ 192.168.10.1 ถ้า ping เจอ แสดงว่า ระบบเชื่อมต่อกันได้แล้วพร้อมจะทำขั้นตอนต่อไป แต่ถ้ายังไม่เจอ ให้ตรวจสอบว่า สาย LAN เสียหรือไม่ เมื่อแก้ไขแล้วลอง ping อีกครั้ง

ที่ Server ให้ทำตามขั้นตอนดังนี้

ไปแก้ไขไฟล์ /etc/sysctl.conf เปลี่ยนค่า net.ipv4.ip_forward ให้มีค่าเป็น 1
สั่งให้ service network restart


ที่เครื่องลูกจะสามารถ ping ไปที่ขา eth0 ของ Server ได้แล้ว และเมื่อสั่ง ping webจะไม่สามารถ pingได้ แต่เมื่อเราลองใช้คำสั่ง tcpdump ที่ตัว Server จะเห็นว่า มี request ออกไปแล้ว แต่ไม่มี response กลับมา เนื่องจากขากลับมานั้น network ไม่สามารถกลับมาที่เครื่อง clientได้ เพราะเป็น ip private จึงต้องมีการทำ NAT ที่ตัว server อีกที
ในการทำ NAT ที่ Server นั้น เราจะใช้ IPtables เข้ามาช่วย โดยการพิมพ์คำสั่งเหล่านี้ ลงไป

iptables -t nat -A POSTROUTING -d ! 192.168.10.0/24 -j MASQUERADE
iptables -A FORWARD -s 192.168.10.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.10.0/24 -j ACCEPT
iptables -A FORWARD -j DROP

เมื่อเราลองทำสอบอีกครั้ง จะเห็นว่า เครื่องลูกสามารถ ping www.google.com ได้แล้ว



ที่มา: http://www.itwizard.info/technology/linux/short_iptables_nat.html