Monday, June 14, 2010

ARP static to startup by add service Ubuntu

ขั้นตอนการทำ arp static เป็น service ทำงานตอนบูตระบบใหม่

1) สร้างไฟล์โดยมี content ประมาณนี้เลย และทำการบันทึกไฟล์ในที่นี้บันทึกเป็น myscriptd
#! /bin/sh
# any command
arp -i eth0 -s 192.168.1.1 00:00:00:11:11:11
* หมายเหตุ
  • 192.168.1.1 คือ ip gateway ซึ่งส่วนมากจะเป็น 192.168.1.1 อยู่แล้ว
  • 00:00:00:11:11:11 คือ mac gateway ซึ่งดูจากคำสั่ง arp -a
  • eth0 คือ Network Card ที่เราต้องการตั้งค่า arp static ให้ ดูได้จากคำสั่ง ifconfig

อีกสคริปจัดไป เขียนเป็นด้วยแฮะ ไม่ธรรมดานะเราเนี๋ย
(แต่แนะนำวิธีแรกง่ายๆ สั้น)


#!/bin/sh

# IP Gateway , most IP Gateway use 192.168.1.1
IP="192.168.1.1"

# Command for arp static arp [-i <interface>] -s <IP Gateway> <MAC Gateway>
CMD=`arp -a $IP`

# Set ARP static for this NIC can find in "ifconfig" command
# eth0, wlan0
NIC=`echo $CMD | cut -d \ -f 7`

# Get mac value from command "arp -a <IP Gateway>"

# mac มันอยู่ตำแหน่ง 4 เมื่อตัดคำด้วยช่องว่างอ่ะนะ
# Use อักขระพิเศษโดยใช้ \ นำหน้าเช่น ช่องว่าง หรือ "
MAC=`echo $CMD | cut -d \ -f 4`

# Show start command
echo "Startup doing ARP static."
echo "Command is \"arp -i $NIC -s $IP $MAC\""

# Run command ARP static
arp -i $NIC -s $IP $MAC

# Show end command
echo "ARP static start ........ OK"

# อ้างอิงการตัดคำใน shell script
# http://www.captain.at/howto-linux-shell-reference.php
# Exam: dsldevice.lan (192.168.1.1) at 00:00:d0:44:33:22 [ether] on eth0

2) คัดลอกไฟล์ myscriptd ไปวางที่ /etc/init.d/
sudo cp myscriptd /etc/init.d/myscriptd
3) เพิ่มสิทธิ์ซะก่อน เพื่อให้ execute ได้
sudo chmod 755 /etc/init.d/myscriptd
หรือ
sudo chmod +x /etc/init.d/myscriptd
4) ทำการเพิ่มสคริปให้เป็น service และกำหนด run level ว่าให้ทำงานตอนบูตระบบ ด้วยคำสั่ง
sudo update-rc.d myscriptd defaults
หรือ
sudo update-rc.d myscriptd start 90 2 3 4 5 .
5) ทำเสร็จรีบูตระบบซะ


ตรวจสอบความเรียบร้อย
  • ตรวจสอบ arp cache ด้วยคำสั่ง arp -a
  • ผลลัพธ์จะประมาณนี้
192.168.1.1 at 00:90:d0:44:af:76 [ether] PERM on eth0
  • สังเกตง่ายๆ ต้องมี PERM ถึงจะสมบูรณ์ เพราะจะบ่งบอกว่าเป็น static ไม่ใช่ dynamic นะจ้ะ

เพิ่มเติม
  • บทความก่อนหน้านี้ เขียนไว้แต่มันไม่ยอมทำงานตอนบูตระบบใหม่อ่ะ ตรงคำสั่ง arp ที่เดียวเลย
  • สาเหตุเพราะว่า ตอนนั้นเราไม่ได้ระบุ NIC ว่าจะตั้งให้ตัวใหนคำสั่งนั้นจริงไม่สามารถทำงานได้ตอนบูตระบบหว่า งง
arp -i eth0 -s 192.168.1.1 00:00:00:11:11:11
  • แล้วทำไมมันทำงานได้ตอนเราสั่ง sudo /etc/init.d/myscriptd start (มันรู้ได้ไงฟะว่าเราสั่ง NIC ใหนหว่า)

อ้างอิง

No comments:

Post a Comment