ตั้ง internet gateway อย่างง่าย ด้วย ipmasq

การตั้ง internet gateway ภายในบ้าน หรือในองค์กร เพื่อใช้หมายเลขไอพีหมายเลขเดียวที่ได้มาเป็นทางผ่านสู่อินเทอร์เน็ตให้กับเครื่องลูกข่าย ทำได้ด้วยเทคนิคที่เรียกว่า IP Masquerade และสามารถเขียนกฎ firewall ในการกรองแพ็กเก็ตต่างๆ ได้ด้วย ทั้งหมดนี้ อาศัยกลไกในเคอร์เนลลินุกซ์ที่เรียกว่า netfilter (สำหรับเคอร์เนล 2.4 ขึ้นไป ถ้าเป็นรุ่นเก่ากว่านั้นจะเป็น ipchain และ ipfwadm) คำสั่งที่ใช้ตั้งกฎก็คือ iptables

ฟังดูยุ่งยาก แต่ในเดเบียนมีแพกเกจที่ช่วยให้ตั้งเกตเวย์ได้อย่างรวดเร็ว คือ ipmasq ซึ่งจะมีคำสั่งช่วยตรวจสอบ route table แยกแยะ interface ที่เป็น public IP และเครือข่ายภายใน แล้วสร้างกฎ iptables เพื่อให้ทำ IP masquerade จากภายในสู่ภายนอก พร้อมทั้งทำ firewall กันแพ็กเก็ตจากภายนอกโดยอัตโนมัติ

รู้หน้าที่คร่าวๆ แล้ว ก็ติดตั้งกันเลย

# aptitude install ipmasq

คำถามระหว่างติดตั้ง ก็มีนิดหน่อย คือถามว่าจะคำนวณ iptables ใหม่เมื่อเปิด PPP หรือไม่ ตรงนี้ก็มีประโยชน์ถ้าคุณเชื่อมต่ออินเทอร์เน็ตผ่านโมเด็ม 56k ด้วย PPP

จากนั้น ทำความรู้จักกับคำสั่งนิดหนึ่ง คือเมื่อใดก็ตาม ที่คุณต้องการคำนวณกฎ iptables ใหม่ ก็สั่งคำสั่ง ipmasq ได้เลย และถ้าจะทำให้เป็นอัตโนมัติ วิธีที่แนะนำก็คือ กำหนดให้คำนวณกฎใหม่ใน ifupdown โดยเพิ่มบรรทัด up, down ในแฟ้ม /etc/network/interfaces เช่น สมมุติว่า eth0 เป็นช่องที่ต่อออกสู่อินเทอร์เน็ต และ eth1 เป็นช่องที่ต่อกับเครือข่ายภายใน

iface eth0 inet static
    address 192.168.1.1
    gateway gateway-ip
    up      /usr/sbin/ipmasq
    down    /usr/sbin/ipmasq -r /etc/ipmasq/ipmasq-down

iface eth1 inet static
    address 192.168.2.1
    up      /usr/sbin/ipmasq
    down    /usr/sbin/ipmasq -r /etc/ipmasq/ipmasq-down

ต่อไป เมื่อคุณสั่ง ifup, ifdown (หรือตอนบูตเครื่อง) ก็จะมีการคำนวณ IP masquerading โดยอัตโนมัติ จบแล้ว! แค่นั้นแหละ สำหรับการตั้งเกตเวย์อย่างง่าย ง่ายไหมล่ะ?

ทีนี้ สมมุติว่าคุณอยากปรับแต่งกฎ ก็สามารถเข้าไปดูกฎได้ที่ไดเรกทอรี /etc/ipmasq/rules/ ในนั้นชื่อกฎจะเรียงตามขั้นตอนต่างๆ คือ

  • A = preinitialization (ตรวจสอบข้อมูลเบื้องต้น เช่น หา interface ภายใน-ภายนอก)
  • F = forwarding rules
  • I = input rules
  • M = masquerading rules
  • O = output rules
  • Z = postinitalization

ชื่อกฎนั้น ค่าปกติจะลงท้ายด้วย .def แต่ถ้ามีกฎชื่อเดียวกันแต่ลงท้ายด้วย .rul ก็จะถูกใช้แทน (ใช้เวลาจะเขียนกฎเองทับค่าเดิม)

กฎของ ipmasq จะซอยย่อยเป็นเรื่องๆ เพื่อให้เพิ่ม-ลดได้ง่ายๆ ค่าปกติที่ให้มานั้น จะทำ IP masquerade จากเครือข่ายภายในออกสู่ภายนอก และกันแพ็กเก็ตภายนอกไม่ให้เข้ามาภายใน ซึ่งถือว่าปลอดภัยสำหรับเครือข่ายทั่ว ๆ ไปอยู่แล้ว แต่ถ้าคุณต้องการเพิ่มกฎเข้าไปอีก เช่น การทำ transparent proxy ก็สามารถคัดลอกไปจาก /usr/share/doc/ipmasq/examples/ ได้ เดี๋ยวไว้พูดถึงการทำ transparent proxy ในตอนหน้าครับ

Comments

แร้วมัน จะเก็บ แพทเกมส์ ทั้งแพท ที่เก็บรูปแบบ ในsquid และ
รูปแบบที่เก็บใน Frox ด้วยหรือป่าวครับ
ผมเริ่ม ศึกษา Ubuntu ตอนนี้ ติดตั้ง ต่อ interfaces ต่างๆได้แล้ว แต่ยังไปไหนไม่เป็นเลยครับ ช่วยหน่อยครับ ..เป็นพระคุณอย่างสูง

eth0 = 192.168.10.6 ภายใน
eth1 = ppp0
eth2 = ppp1

Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้