<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SpaLinux.com &#187; Networking</title>
	<atom:link href="http://spalinux.com/tag/networking/feed" rel="self" type="application/rss+xml" />
	<link>http://spalinux.com</link>
	<description>Resources for Relaxing Linux System Administrators</description>
	<lastBuildDate>Sat, 21 Jan 2012 16:07:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>คอนฟิก Policy Based Routing บนลีนุกซ์</title>
		<link>http://spalinux.com/2008/10/configure_policy_based_routing_on_linux</link>
		<comments>http://spalinux.com/2008/10/configure_policy_based_routing_on_linux#comments</comments>
		<pubDate>Fri, 24 Oct 2008 18:58:42 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[ip route]]></category>
		<category><![CDATA[ip rule]]></category>
		<category><![CDATA[policy based routing]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=297</guid>
		<description><![CDATA[โดยปกติแล้ว เวลาหาเส้นทางเพื่อการส่งข้อมูล (routing) บนเน็ตเวิร์กไม่ว่าจะบนลีนุกซ์หรือเร้าเตอร์ทั่วไป จะดูจาก IP Address ปลายทาง (Destination Address) ที่อยู่ใน IP Packet เป็นหลัก แต่ในบางกรณี เราสามารถคอนฟิกลีนุกซ์หรือเร้าเตอร์ให้ดูข้อมูลอื่นๆ ที่อยูใน IP Packet เพื่อหาเส้นทาง เช่น ดูจาก IP Address ต้นทาง (Source Address) การคอนฟิกเช่นนี้เรียกว่า Policy based routing ในบทความนี้จะกล่าวถึงวิธีการคอนฟิก Policy based routing บนลีนุกซ์ เพื่อให้ดูข้อมูล IP Address ต้นทาง เวลาหาเส้นทาง (routing) ที่จะส่งข้อมูลไปยังเร้าเตอร์ตัวถัดไป ความต้องการของระบบ ลีนุกซ์ที่จะคอนฟิกเป็น Policy based routing ได้ ใน Kernel ต้องเปิดการใช้งาน (enable) คุณสมบัติสองอย่างนี้ Networking [...]]]></description>
			<content:encoded><![CDATA[<p>โดยปกติแล้ว เวลาหาเส้นทางเพื่อการส่งข้อมูล (routing) บนเน็ตเวิร์กไม่ว่าจะบนลีนุกซ์หรือเร้าเตอร์ทั่วไป จะดูจาก IP Address ปลายทาง<br />
(Destination Address) ที่อยู่ใน IP Packet เป็นหลัก</p>
<p>แต่ในบางกรณี เราสามารถคอนฟิกลีนุกซ์หรือเร้าเตอร์ให้ดูข้อมูลอื่นๆ ที่อยูใน IP Packet เพื่อหาเส้นทาง เช่น ดูจาก IP Address ต้นทาง (Source Address) การคอนฟิกเช่นนี้เรียกว่า Policy based routing</p>
<p>ในบทความนี้จะกล่าวถึงวิธีการคอนฟิก Policy based routing บนลีนุกซ์ เพื่อให้ดูข้อมูล IP Address ต้นทาง เวลาหาเส้นทาง (routing) ที่จะส่งข้อมูลไปยังเร้าเตอร์ตัวถัดไป</p>
<p><span id="more-297"></span></p>
<h4>ความต้องการของระบบ</h4>
<p>ลีนุกซ์ที่จะคอนฟิกเป็น Policy based routing ได้ ใน Kernel ต้องเปิดการใช้งาน (enable) คุณสมบัติสองอย่างนี้</p>
<pre>Networking -&gt; Networking options -&gt;
[*]   IP: advanced router  (CONFIG_IP_ADVANCED_ROUTER)
[*]   IP: policy routing   (CONFIG_IP_MULTIPLE_TABLES)</pre>
<p>โดยทั่วไปจากการติดตั้ง เวอร์ชั่นส่วนใหญ่ของลีนุกซ์จะเปิดการใช้งานคุณสมบัตินี้อยู่แล้ว ตัวอย่างไฟล์คอนฟิกของ Kernel ที่ติดตั้งมากับ Fedora 9</p>
<pre>[root@linux-router ~]# <strong>cat /boot/config-2.6.25-14.fc9.i686</strong>
...
CONFIG_IP_ADVANCED_ROUTER=y
...
CONFIG_IP_MULTIPLE_TABLES=y
...</pre>
<p>โปรแกรมที่ใช้คอนฟิก Policy คือ iproute ซึ่งส่วนใหญ่ก็ติดตั้งมาให้อยู่แล้ว</p>
<p>ตัวอย่างเวอร์ชั่นของ iproute ที่ติดตั้งมากับ Fedora 9</p>
<pre>[root@linux-router ~]# <strong>rpm -q iproute</strong>
iproute-2.6.23-4.fc9.i386</pre>
<h4>การเชื่อมต่อของเน็ตเวิร์ก</h4>
<p>ในบทความนี้จะคอนฟิกบนลีนุกซ์ ที่ทำหน้าที่เป็น router เชื่อมระหว่าง เน็ตเวิร์กภายในองค์กร และ เน็ตเวิร์กที่ต่อเข้ากับ Internet Router เช่น ADSL หรือ Leased-line โดยมีตัวอย่าง IP Address ดังต่อไปนี้</p>
<p><strong>Linux Router</strong></p>
<ul>
<li><strong>eth0</strong>: 192.168.1.1/24 ต่อกับ Internet ADSL Router ที่มี IP เป็น 192.168.1.254</li>
<li><strong>eth1</strong>: 192.168.2.1/24 ต่อกับ Internet Leased-line Router ที่มี IP เป็น  192.168.2.254</li>
<li><strong>eth2</strong>: 10.1.0.1/24 ทำหน้าที่เป็น Default Gateway ของ Net #1 ภายในองค์กร</li>
<li><strong>eth3</strong>: 10.2.0.1/24 ทำหน้าที่เป็น Default Gateway ของ Net #2 ภายในองค์กร<br />
 </li>
</ul>
<p>ต้องการคอนฟิกให้</p>
<ul>
<li>เครื่องที่อยู่ใน Net #1: 10.1.0.0/24 เวลาใช้อินเตอร์เน็ต ให้ใช้ ADSL Router</li>
<li>เครื่องที่อยู่ใน Net #2: 10.2.0.0/24 เวลาใช้อินเตอร์เน็ต ให้ใช้ Leased-line Router</li>
</ul>
<p>ก่อนที่จะเริ่มคอนฟิก policy ในขั้นต่อไปได้นั้น ต้องตรวจสอบ routing table ของทุกเครื่องว่าสามารถ ping ถึงกันได้หมด เช่น เครื่องที่อยู่ในเน็ตเวิร์ก Net #1 ต้องสามารถ ping ไปยัง ADSL Router ได้ และเครื่องที่อยู่ใน Net #2 ต้องสามารถ ping ไปยัง Leased-line Router ได้</p>
<h4>คอนฟิกลีนุกซ์ให้ทำหน้าที่เป็น Router</h4>
<p>โดยดีฟอลต์แล้ว ลีนุกซ์ไม่ได้ทำหน้าที่เป็น Router คือจะไม่ส่งต่อข้อมูล (IP packet forwarding) ใดๆ ระหว่างอินเตอร์เฟซ ดังนั้น ถ้าต้องการให้ลีนุกซ์ทำ routing ได้ ต้องเปิดคุณสมบัตินี้ก่อน ซึ่งสามารถทำได้โดยแก้ไขไฟล์ /etc/sysctl.conf เปลี่ยนคอนฟิกของ net.ipv4.ip_forward จากค่า 0 เป็น 1</p>
<p>ตัวอย่างการแก้ไขไฟล์ /etc/sysctl.conf เพื่อคอนฟิกเป็น Router</p>
<pre># Controls IP packet forwarding
net.ipv4.ip_forward = <strong>1</strong></pre>
<p>หลังจากแก้ไขไฟล์แล้ว ต้องรันคำสั่ง sysctl -p เพื่อให้ค่าที่แก้ไขไปมีผลทันที</p>
<p>ตัวอย่างการรันคำสั่ง sysctl</p>
<pre>[root@linux-router ~]#<strong> sysctl -p
</strong>net.ipv4.ip_forward = 1
...</pre>
<h4>ตรวจสอบคอนฟิกก่อนทำ Policy</h4>
<p>ใช้คำสั่ง ip rule เพื่อตรวจสอบว่าลีนุกซ์ใช้กฎเกณฑ์ (rule) ใดในการทำ routing โดยดีฟอลต์ลีนุกซ์จะตัดสินใจโดยดูจาก 3 ส่วนหลักๆ คือ local, main, default ในการตรวจสอบทุก packet (from all)</p>
<pre>[root@linux-router ~]# <strong>ip rule list
</strong>0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default</pre>
<p>ในที่นี้จะสนใจเฉพาะในส่วน main ซึ่งเป็น routing table ที่ใช้งานตามปกติ เราสามารถดูรายละเอียดของ main ได้ โดยใช้คำสั่ง ip route ดังนี้</p>
<pre>[root@linux-router ~]# <strong>ip route list table main</strong>
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.1
192.168.2.0/24 dev eth1  proto kernel  scope link  src 192.168.2.1
10.1.0.0/24 dev eth2  proto kernel  scope link  src 10.1.0.1
10.2.0.0/24 dev eth3  proto kernel  scope link  src 10.2.0.1</pre>
<p>ผลลัพธ์ที่ได้จะเหมือนกับที่ได้จากคำสั่ง netstat -rn ดังนี้</p>
<pre>[root@linux-router ~]# <strong>netstat -rn
</strong>Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
10.1.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth2
10.2.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth3</pre>
<p>จะเห็นว่าไม่มีการคอนฟิก default gateway บนลีนุกซ์เลย เราจะคอนฟิกโดยใช้ policy ตามขั้นตอนต่อไป</p>
<h4>คอนฟิก Policy สำหรับ Net #1</h4>
<p>ต้องการให้ packet ที่มาจากเครื่องที่อยู่ใน Net #1 10.1.0.0/24 เวลาส่งต่อไปยังอินเตอร์เน็ต ให้ส่งไปที่ ADSL Router สามารถคอนฟิกได้ดังนี้</p>
<p>ตัวอย่างการคอนฟิกเพื่อกำหนดกฎเกณฑ์ว่ามาจาก 10.1.0.0/24 ให้จัดเข้าอยู่ Table 10</p>
<pre>[root@linux-router ~]# <strong>ip rule add from 10.1.0.0/24 table 10</strong></pre>
<pre>[root@linux-router ~]# <strong>ip rule list
</strong>0:      from all lookup local
32765:  from 10.1.0.0/24 lookup 10
32766:  from all lookup main
32767:  from all lookup default</pre>
<p>ตัวอย่างการกำหนดเส้นทางการส่งของ Table 10 ให้ส่งออกทาง eth0 ไปที่ ADSL Router (192.168.1.254)</p>
<pre>[root@linux-router ~]# <strong>ip route add default via 192.168.1.254 dev eth0 table 10</strong></pre>
<pre>[root@linux-router ~]# <strong>ip route list table 10
</strong>default via 192.168.1.254 dev eth0</pre>
<h4>คอนฟิก Policy สำหรับ Net #2</h4>
<p>สำหร้บ Net #2 ต้องการให้ packet ที่มาจากเครื่องที่อยู่ใน Net #2 10.2.0.0/24 เวลาส่งต่อไปยังอินเตอร์เน็ต ให้ส่งไปที่ Leased-line Router สามารถคอนฟิกได้ดังนี</p>
<p>ตัวอย่างการคอนฟิกเพื่อกำหนดกฎเกณฑ์ว่ามาจาก 10.2.0.0/24 ให้จัดเข้าอยู่ Table 20</p>
<pre>[root@linux-router ~]# <strong>ip rule add from 10.2.0.0/24 table 20</strong></pre>
<pre>[root@linux-router ~]# <strong>ip rule list
</strong>0:      from all lookup local
32764:  from 10.2.0.0/24 lookup 20
32765:  from 10.1.0.0/24 lookup 10
32766:  from all lookup main
32767:  from all lookup default</pre>
<p>ตัวอย่างการกำหนดเส้นทางการส่งของ Table 20 ให้ส่งออกทาง eth1 ไปที่ Leased-line Router (192.168.2.254)</p>
<pre>[root@linux-router ~]# <strong>ip route add default via 192.168.2.254 dev eth1 table 20</strong></pre>
<pre>[root@linux-router ~]# <strong>ip route list table 20
</strong>default via 192.168.2.254 dev eth1</pre>
<h4>การทดสอบ Policy</h4>
<p>หลังจากที่คอนฟิกแล้ว สามารถทดสอบได้โดยใช้คำสั่ง ping จากไคลเอนต์ในเน็ตเวิร์กทั้งสองว่าไปตามเส้นทางที่กำหนดไว้หรือไม่</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://lartc.org/howto/" target="_blank">Linux Advanced Routing &amp; Traffic Control HOWTO</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/10/configure_policy_based_routing_on_linux/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ตรวจสอบสถานะของการ์ดเน็ตเวิร์กบนลีนุกซ์</title>
		<link>http://spalinux.com/2008/09/verify_lan_network_interface_status_on_linux</link>
		<comments>http://spalinux.com/2008/09/verify_lan_network_interface_status_on_linux#comments</comments>
		<pubDate>Sat, 20 Sep 2008 18:51:00 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=187</guid>
		<description><![CDATA[บทความนี้ขอแนะนำการใช้คำสั่ง ethtool บนลีนุกซ์เพื่อตรวจสอบสถานะของการ์ดเน็ตเวิร์กว่าเป็นอย่างไร เช่น สถานะของลิ้งก์ที่เชื่อมต่ออยู่ว่า Up หรือ Down ความเร็ว (speed) ของการเชื่อมต่อเท่าไร ลีนุกซ์ส่วนใหญ่มีคำสั่ง ethtool ติดตั้งมาอยู่แล้ว ไม่จะเป็นต้องติดตั้งเพิ่มแต่อย่างไร ตัวอย่างเวอร์ชั่นของ ethtool ที่ติดตั้งมากับ Fedora 9 [root@server ~]# rpm -q ethtool ethtool-6-1.fc9.x86_64 วิธีการใช้คำสั่ง ethtool การใช้คำสั่ง ethtool ต้องระบุการ์ดเน็ตเวิร์กที่ต้องการตรวจสอบ เช่นตัวอย่างด้านล่างเป็นการตรวจสอบสถานะของการ์ด eth0 [root@server ~]# ethtool eth0 Settings for eth0:         Supported ports: [ TP ]         Supported link modes:   10baseT/Half 10baseT/Full                                 100baseT/Half 100baseT/Full [...]]]></description>
			<content:encoded><![CDATA[<p>บทความนี้ขอแนะนำการใช้คำสั่ง ethtool บนลีนุกซ์เพื่อตรวจสอบสถานะของการ์ดเน็ตเวิร์กว่าเป็นอย่างไร เช่น สถานะของลิ้งก์ที่เชื่อมต่ออยู่ว่า Up หรือ Down ความเร็ว (speed) ของการเชื่อมต่อเท่าไร</p>
<p><span id="more-187"></span></p>
<p>ลีนุกซ์ส่วนใหญ่มีคำสั่ง ethtool ติดตั้งมาอยู่แล้ว ไม่จะเป็นต้องติดตั้งเพิ่มแต่อย่างไร</p>
<p>ตัวอย่างเวอร์ชั่นของ ethtool ที่ติดตั้งมากับ Fedora 9</p>
<pre>[root@server ~]# <strong>rpm -q ethtool
</strong>ethtool-6-1.fc9.x86_64</pre>
<h4>วิธีการใช้คำสั่ง ethtool</h4>
<p>การใช้คำสั่ง ethtool ต้องระบุการ์ดเน็ตเวิร์กที่ต้องการตรวจสอบ เช่นตัวอย่างด้านล่างเป็นการตรวจสอบสถานะของการ์ด eth0</p>
<pre>[root@server ~]# <strong>ethtool eth0
</strong>Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Advertised auto-negotiation: Yes
<span style="color: #339966;">  </span><span style="color: #339966;"><strong>      Speed: 1000Mb/s
</strong>  </span><strong><span style="color: #339966;">      Duplex: Full
</span></strong>        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: g
        Current message level: 0x000000ff (255)
<strong><span style="color: #339966;">        Link detected: yes</span></strong></pre>
<p>ผลลัพธ์ที่ได้แสดงถึงสถานะของการ์ดเน็ตเวิร์กคร่าวๆ ดังนี้</p>
<ul>
<li><span style="color: #339966;"><strong>Link detected: yes</strong>    </span>สถานะการเชื่อมต่อ Up</li>
<li><span style="color: #339966;"><strong>Speed: 1000Mb/s </strong>    </span>เชื่อมต่อที่ความเร็ว 1000Mb/s หรือ Gigabit</li>
<li><span style="color: #339966;"><strong>Duplex: Full</strong>             </span>  สามารถรับส่งข้อความได้แบบ Full Duplex</li>
</ul>
<p>อีกตัวอย่างหนี่ง เป็นการตรวจสอบการ์ดเน็ตเวิร์กที่สถานะการเชื่อมต่อมีปัญหาหรือ Down</p>
<pre>[root@server ~]# <strong>ethtool eth1
</strong>Settings for eth1:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Advertised auto-negotiation: Yes
<strong><span style="color: #ff0000;">        Speed: Unknown! (0)
</span></strong>        Duplex: Half
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: g
        Current message level: 0x000000ff (255)
 <strong><span style="color: #ff0000;">       Link detected: no</span></strong></pre>
<p>ผลลัพธ์ที่ได้คือ</p>
<ul>
<li><span style="color: #ff0000;"><strong>Link detected: no     </strong></span>สถานะการเชื่อมต่อ Down</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/09/verify_lan_network_interface_status_on_linux/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

