จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน interface ใด

ถ้าหากเรื่องเรามีการเชื่อมต่อมากก่า 1 eth จะมีการกำหนดอย่างไรว่าการใช้งาน internet จะผ่าน interface ไหน

เช่น squid ใช้ข้อมูล internet ผ่าน eth1
wget ใช้ข้อมูล internet ผ่าน eth2

Re: จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน in

น่าจะพอมีแนวทางนะครับ แต่ผมยังไม่เคยทำ
หลักการ

  • Squid มี option ชื่อ tcp_outgoing_address ทำให้เราสามารถกำหนด source address ได้ครับ
  • ใช้หลักการ Advance Routing ในการดักจับว่า ถ้า source address มาจาก squid ให้ทำการ route ไปที่ eth1
  • ส่วนเรื่อง wget ผมเดาเอาว่า ให้เป็น default route นั่นหมายความว่าให้ eth2 เป็น default route

ข้อมูลเรื่อง Netfilter & iproute - marking packets น่าจะพอช่วยได้ครับ :P
http://lartc.org/howto/lartc.netfilter.html

ตัวอย่าง:
ข้อมูล (สมมติ)
เตรียมพร้อม

# aptitude install iproute
  • eth1: IP-192.168.0.1, GW-192.168.0.254
  • eth2: IP-192.168.1.1, GW-192.168.1.254

ตามที่บอกครับ กำหนดให้ eth2 เป็น default route (route หลัก)

# ip route del default
# ip route add default via 192.168.1.254 dev eth2

เตรียมการสำหรับ squid
เพิ่ม option

tcp_outgoing_address 192.168.0.1
# /etc/init.d/squid restart

เตรียมจัดการ filter

# iptables -A PREROUTING -t mangle -p tcp -s 192.168.1.1 -j MARK --set-mark 1

จัดการ route

# echo 201 squid >> /etc/iproute2/rt_tables
# ip rule add fwmark 1 table squid
# ip rule add default via 192.168.0.254 dev eth1 table squid

ทดสอบดู โดยการทำ DNS Query ใช้ nslookup โดยจะต้องผ่าน และการ query จะผ่าน eth2 ซึ่งเป็น default route
และการดึงข้อมูลของ squid จะต้องผ่าน eth1 ตามการ filter ที่กำหนดเข้าไป

ปล. ผมยังไม่เคยลองจริง ๆ ยังไม่กล้ารับประกันว่าใช้งานได้หรือไม่ แต่แนวคิดก็เป็นเช่นนี้ครับผม

___
Neutron: Linux Addict!

Re: จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน in

แล้วถ้าหากเป็นโปรแกรมอื่นละครับที่ไม่ใช่ squid แบบนี้ก็ไม่สามารถกำหนดได้ใช่มั้ยครับ

เช่น
ใช้ firefox ให้ออก eth0
ใช้ pidgin ให้ออก eth1

Re: จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน in

ตรวจสอบรูปแบบอื่นๆ ก็ได้ครับ เช่น Filter ตาม Port

# iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1

port 80 เป็น Web
ส่วน port อื่น ๆ ต้องลองหาข้อมูลเพิ่มเติมครับ
___
Neutron: Linux Addict!

Re: จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน in

แบบนั้นใช้ iptable กำหนด port นิครับ ถ้าเรามี browser สองตัวละครับ opera กับ firefox จะแยกให้ออกคนละ interface ยังไง?

Re: จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน in

ดูไปแล้ว ... ชีวิตจะยุ่งยากเกินไปหรือเปล่าครับ :P

ปกติการทำ Routing จะมองเรื่อง Services เป็นหลักครับ แยกย่อยขนาดที่แจ้งมา ผมไม่แน่ใจเหมือนกันว่าจะทำได้หรือเปล่า
อาจจะทำได้ แต่ยังมองไม่เห็นประโยชน์ที่ชัดเจน

ตอนนี้ก็เลยงง ๆ ว่า จขก. ต้องการจะทำ Load Balance หรือเปล่า ? เพราะถ้าเป็น Load Balance จะมีวิธีการจัดการอีกแบบครับ

___
Neutron: Linux Addict!

Re: จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน in

ไม่ได้ต้องการทำ Load Balance ครับ แต่มีโปรแกรมอยู่ตัวนึงที่ต้องการให้การใช้งาน internet ของมันออกไปทาง interface eth2
ซึ่งเชื่อมต่อไปหลาย ip หลาย port

Re: จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน in

อืม... กรณีนี้ จนปัญญาเหมือนกันครับ
___
Neutron: Linux Addict!

Re: จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน in

เพิ่งนึก Idea ออกครับ อาจจะลองใช้ l7-filter
เช็คดูว่า application ไหนกำลังจะขอเชื่อมต่อเน็ตครับ

แต่วิธีนี้จะยุ่งยากมาก ๆ หลักการจะคล้าย ๆ กับการ Block BitTorrent ครับ
คือ เช็คให้ได้ว่า ที่ต่อเข้ามาเป็น โปรแกรม BitTorrent กรณีเราคือ
เช็คให้ได้ว่า เป็นโปรแกรมที่เราต้องการ

___
Neutron: Linux Addict!

Re: จะกำหนดได้หรือไม่ว่าต้องการให้โปรแกรมใช้งาน internet ผ่าน in

ขอบคุณครับ ผมคิดได้อีกวิธีนึงถ้าเราเปิด socks ในเครื่องเราแล้วบังคับให้มันออกไปทาง interface ที่กำหนดน่าจะได้นะครับแต่ในที่นี่โปรแรกมนั้นต้องตั้ง proxy ได้ด้วย :(

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre> <blockquote> <img> <h3> <h4> <h5>
  • Lines and paragraphs break automatically.
  • E-Mail addresses are hidden with reCAPTCHA Mailhide.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.