ตั้งค่า Raspberry Pi เพื่อใช้งาน AMPRNet IP 44 ของนักวิทยุสมัครเล่น
สำหรับในบทความนี้จะเป็นการติดตั้ง Package L2TP ใน Raspberry Pi โดยจะมีการตั้งค่าเพื่อให้เชื่อมไปยัง VPN Server AMPRNet IP44 ของทีม DTDXA โดยเมื่อทำการตั้งค่าเรียบร้อยแล้วตัว Raspberry Pi จะมี IP Address 44.159.12.xx อยู่ในตัวเลย (ณ ปัจจุบันชุด IP ได้มีการเปลี่ยนแปลงมาอยู่ที่ 44.32.xx.xx) ซึ่งวิธีการนี้สามารถนำไปใช้ใน PC ที่ลง OS เป็น Debian ได้ด้วยเพราะมีพื้นฐานเดียวกันกับ OS ของ Raspberry Pi ซึ่งเป็น Raspbian
ในบทความนี้คำสั่งต่าง ๆ ผมทำด้วยสิทธิ์ของ root ถ้าท่านใด login ด้วย user ธรรมดา การใช้คำสั่งต่าง ๆ จะต้องมี sudo นำหน้าด้วย หรืออาจใช้ sudo su เพื่อเปลี่ยนสิทธิ์เป็น root ก่อนใช้คำสั่งก็ได้
เริ่ม Update และติดตั้ง package
ในการติดตั้ง package ต่าง ๆ ของ Linux นั้นควรจะมีการ update ระบบก่อนทุกครั้ง สำหรับ Raspberry Pi จะใช้คำสั่ง apt-get update
apt-get update
ถ้าหากเป็น Image Allstarlink beta 2.0.0 อาจจะเกิดปัญหาในการ update ตามภาพตัวอย่างด้านล่าง ให้ใช้คำสั่งเพื่อเพิ่ม key repository เข้าไปครับ
ให้ใช้คำสั่งตามบรรทัดด้านล่างนี้เพื่อเพิ่ม key repository ของ ASL Beta เข้าไป
curl -s http://apt.allstarlink.org/repos/repo_signing.key | apt-key add -
ทำการ update package อีกครั้งด้วยคำสั่ง apt-get update ที่มี option
— allow-releaseinfo-change ด้วย เพื่อยอมให้มีการเปลี่ยนเวอร์ชั่นของระบบ
apt-get update --allow-releaseinfo-change
จะเห็นว่าคราวนี้ error ต่าง ๆ จะหายไปแล้ว ซึ่งต่อไปนี้สามารถ update ระบบได้ด้วยคำสั่ง apt-get update ปกติได้แล้ว
เริ่มติดตั้ง package ต่าง ๆ ที่เกี่ยวกับ VPN L2TP IPSec
การติดตั้ง package VPN L2TP IPSec ใน Raspberry Pi หรือ Debian Linux นั้นทำได้ไม่ยาก โดยการใช้คำสั่ง apt-get install และตามด้วยชื่อ package ต่าง ๆ ที่ต้องการติดตั้ง ตามตัวอย่างด้านล่าง
apt-get -y install strongswan xl2tpd net-tools
ในการติดตั้งถ้ามีข้อความขึ้นเตือนให้กด Enter ผ่านไปนะครับ
เริ่มสร้างไฟล์ตั้งค่าต่าง ๆ ของ L2TP IPSec
สำหรับไฟล์แรกจะเป็นไฟล์ config ของ IPSec ให้ใช้คำสั่ง pico /etc/ipsec.conf แล้วกด Enter หากมีข้อมูลเดิมอยู่ในไฟล์ให้ลบทิ้งโดยการกด Ctrl+K เพื่อลบออกทีละบรรทัด แล้ว copy ข้อมูลการตั้งค่าใหม่ลงไปแทน เมื่อเสร็จแล้วกด Ctrl+O แล้ว Enter เพื่อบันทึก และ Ctrl+X เพื่อออกจากการแก้ไข
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev1
authby=secret
ike=aes128-sha1-modp1024,3des-sha1-modp1024!
esp=aes128-sha1-modp1024,3des-sha1-modp1024!
conn L2TP-PSK
keyexchange=ikev1
left=%defaultroute
auto=add
authby=secret
type=transport
leftprotoport=17/1701
rightprotoport=17/1701
# set this to the ip address of your vpn server
# IP เดิมยกเลิกใช้งาน right=119.59.96.112
right=81.31.234.70
ต่อไปทำการแก้ไขไฟล์ /etc/ipsec.secrets ซึ่งเป็นไฟล์เก็บค่าคีย์ของ IPSec ให้ใช้คำสั่ง pico /etc/ipsec.secrets เพื่อแก้ไข ถ้ามีข้อมูลเดิมอยู่ก็กด Ctrl+K ลบออกให้หมดและใส่ข้อมูลด้านล่างลงไป หลังจากนั้นกด Ctrl+X และ Ctrl+O เพื่อบันทึกและออกจากการแก้ไข
: PSK "dtdxa"
ทำการแก้ไขไฟล์ /etc/xl2tpd/xl2tpd.conf ซึ่งเป็นไฟล์การตั้งค่าของ L2TP ด้วยคำสั่ง pico /etc/xl2tpd/xl2tpd.conf หากมีข้อมูลเดิมอยู่ก็ให้ลบและใส่ข้อมูลใหม่ลงไปแทน ทำการบันทึกและออกจากการแก้ไข
[lac myvpn]
# IP เดิมยกเลิกใช้งาน lns = 119.59.96.112
lns = 81.31.234.70
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes
ต่อไปแก้ไขไฟล์ /etc/ppp/options.l2tpd.client ซึ่งเป็นไฟล์ตั้งค่าในการเชื่อมต่อ VPN L2TP ไว้ ซึ่งจะเก็บ username/password ในการเชื่อมต่อด้วย โดยการใช้คำสั่ง pico /etc/ppp/options.l2tpd.client แล้วใส่ข้อมูลต่าง ๆ ลงไป ทำการบันทึกค่าและออกจากการแก้ไขด้วยการกด Ctrl+O และ Ctrl+X
pico /etc/ppp/options.l2tpd.client
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-chap
noccp
noauth
mtu 1280
mru 1280
noipdefault
defaultroute
usepeerdns
connect-delay 5000
name "username"
password "password"
กำหนดโหมดของไฟล์ /etc/ppp/options.l2tpd.client ให้สามารถอ่านได้เฉพาะผู้ที่มีสิทธิ์ root เท่านั้น ด้วยคำสั่งด้านล่าง
chmod 600 /etc/ppp/options.l2tpd.client
ทำการสร้างไฟล์ control ของบริการ xl2tpd ตามคำสั่งด้านล่าง
mkdir -p /var/run/xl2tpd
touch /var/run/xl2tpd/l2tp-control
ทำการ restart service ต่าง ๆ ที่เกี่ยวข้องกับการเชื่อมต่อ VPN L2TP ด้วยคำสั่ง…
service strongswan restart
service xl2tpd restart
service ipsec restart
การตั้งค่าต่าง ๆ เพื่อเชื่อมต่อ VPN L2TP ก็ถือว่าเสร็จแล้ว ให้ทดสอบการเชื่อมต่อโดยการใช้คำสั่ง…
ipsec up L2TP-PSK
echo "c myvpn" > /var/run/xl2tpd/l2tp-control
จะเห็นว่าสถานะของ connection เป็น successfully ซึ่งก็หมายถึงเชื่อมต่อได้สำเร็จ ทดสอบใช้คำสั่ง route จะเห็นตาราง routing มี connection ppp0 ขึ้นมา
หรือถ้าเราใช้คำสั่ง ifconfig ก็จะมีข้อมูลต่าง ๆ ของ Interface ppp0 ด้วย
ขณะนี้ L2TP IPSec เราเชื่อมต่อและได้หมายเลข IP44 มาแล้วก็จริง แต่ข้อมูลต่าง ๆ นั้นยังวิ่งออกทางอินเตอร์เน็ตเส้นหลักอยู่ ซึ่งจะต้องมีการตั้งค่าเพิ่มเติมอีก สั่งหยุดการทำงานของ L2TP IPSec ก่อนโดยใช้คำสั่ง…
echo "d myvpn" > /var/run/xl2tpd/l2tp-control
ipsec down L2TP-PSK
จะเห็นว่าหลังจากสั่งหยุดการทำงานของ L2TP IPSec แล้ว เมื่อใช้คำสั่ง route จะไม่เห็น Interface ppp0 แล้วเช่นกัน
การกำหนดให้ข้อมูลต่าง ๆ วิ่งออกที่ gateway ของ L2TP IPSec
สำหรับการกำหนดเส้นทางของข้อมูลนั้นค่อนข้างซับซ้อนเข้าใจยาก ให้ค่อย ๆ ทำความเข้าใจนะครับ ผมจะเริ่มจากกำหนดเส้นทางของ IP gateway ของ VPN Server ให้ออกทางอินเตอร์เน็ตเส้นหลักตลอด ไม่ให้ออกทาง L2TP IPSec เพราะอินเตอร์เน็ตเส้นหลักนั้นเป็นพื้นฐานในการเชื่อมต่อ จะต้องให้ออกที่เส้นหลักเท่านั้น ตัวอย่างนี้ IP gateway ของ VPN Server คือ 81.31.234.70 (ของเดิม 119.59.96.112) ก็จะต้องออกที่หมายเลข IP gateway ของอินเตอร์เน็ตเส้นหลัก สั่งได้โดยการใช้คำสั่ง ip route
ip route add 81.31.234.70/32 via 192.168.66.1
ถ้า IP Gateway ที่ใช้อยู่เป็น 192.168.1.1 ก็จะต้องเปลี่ยนค่าตามตัวอย่าง
ip route add 81.31.234.70/32 via 192.168.1.1
ณ ตอนนี้ถ้ามีการเรียกไปยังหมายเลข IP 81.31.234.70 ก็จะออกทาง IP ของ default gateway เท่านั้น
ต่อไปเราจะทำการลบ default gateway ออกเพื่อเตรียมการที่จะให้เส้นทางข้อมูลออกทาง L2TP IPSec ให้ใช้คำสั่ง ip route del default เพื่อลบเส้นทางข้อมูลนี้
ip route del default
จะเห็นว่าตอนนี้ default จากเดิมที่อยู่บรรทัดแรกนั้นหายไปแล้ว ถ้าเรามีการสั่งให้ L2TP IPSec ทำงานตอนนี้ก็จะเพิ่มขึ้นมาเป็น default gateway แทน ให้ใช้คำสั่งเหมือนเดิมที่ทำให้ ipsec up ขึ้นมา
ipsec up L2TP-PSK
echo "c myvpn" > /var/run/xl2tpd/l2tp-control
ตามภาพด้านบนจะเห็นว่าหลังจากสั่งให้ L2TP IPSec ทำงานแล้ว default gateway จะขึ้นมาเป็นของ Interface ppp0 ซึ่งหมายถึงตอนนี้ข้อมูลต่าง ๆ ก็จะวิ่งผ่าน ppp0 หรือ VPN L2TP IPSec นั้นเอง ทดสอบใช้คำสั่ง ping จากเครื่อง PC ของเราไปที่ IP44 ที่เราได้รับมาก็จะต้องมี reply กลับมา
ตอนนี้ถือว่าการตั้งค่าให้ Raspberry Pi หรือ Debian สำเร็จแล้วทุกอย่าง สามารถใช้งานได้ แต่การนำไปใช้งานจริงผู้ใช้ควรศึกษาเพิ่มเติม เพราะในความเป็นจริงแล้วหากอินเตอร์เน็ตเส้นหลักหลุดไป ถึงแม้ว่าจะกลับมาแล้วก็ตาม L2TP IPSec ของเราก็อาจจะไม่กลับมา up เหมือนเดิมก็ได้ จะต้องมีการสั่งให้ up ขึ้นมา ซึ่งต้องนำไปประยุกต์ใช้งาน อาจจะมีการตั้ง script ให้มีการตรวจสอบการเชื่อมต่อเองทุก ๆ 1 หรือ 2 นาทีก็ได้ หากไม่มีการ up ขึ้นมาก็ให้ script สั่ง ipsec up เอง
คำสั่งที่จะทำให้ L2TP IPSec ทำงาน
ipsec up L2TP-PSK
echo "c myvpn" > /var/run/xl2tpd/l2tp-control
คำสั่งที่จะทำให้ L2TP IPSec หยุดทำงาน
echo "d myvpn" > /var/run/xl2tpd/l2tp-control
ipsec down L2TP-PSK
และแน่นอนหากมีค่า default gateway เดิมอยู่ต้องลบออกเสมอ มิฉะนั้น default gateway ของเราก็จะไม่ขึ้นเป็น ppp0 ด้วยคำสั่ง
ip route del default
สำหรับการสั่งให้ L2TP IPSec เริ่มเชื่อมต่ออัตโนมัติทุกครั้งที่มีการ boot ระบบขึ้นมาเราอาจจะทำเป็น script เพื่อให้ทำงานเองทุกครั้งที่ boot ขึ้นมาโดยนำไปไว้ในไฟล์ /etc/rc.local โดยใช้คำสั่ง pico เสร็จแล้ววาง script ลงไป อย่าลืมเปลี่ยนหมายเลข IP ของ gateway อินเตอร์เน็ตเส้นหลักเป็นของตัวเองที่ใช้อยู่ ทำการบันทึกค่าต่าง ๆ โดยการกด Ctrl+O และ Ctrl+X เพื่อออกจากการแก้ไข
pico /etc/rc.local
แล้วนำคำสั่งต่าง ๆ วางลงในไฟล์ /etc/rc.local
#!/bin/sh -e
sleep 20
/usr/bin/ip route add 81.31.234.70/32 via 192.168.66.1
/usr/bin/ip route del default
sleep 2
/usr/sbin/ipsec up L2TP-PSK
sleep 2
echo “c myvpn” > /var/run/xl2tpd/l2tp-control
sleep 20 หมายถึงให้รอ 20 วินาทีแล้วค่อยทำคำสั่งต่อไป เพื่อให้รออินเตอร์เน็ตเส้นหลักเชื่อมต่อเรียบร้อยก่อน
เสร็จแล้วสั่งเปลี่ยนโหมดของไฟล์ /etc/rc.local ให้เป็นแบบที่ run ได้โดยใช้คำสั่ง…
chmod 755 /etc/rc.local
ทดสอบ reboot ระบบ และรอดูผลอาจจะลองใช้เครื่อง PC ping หมายเลข IP44 หรือลองใช้คำสั่ง route และ ifconfig เพื่อดูผลลัพธ์หลังจาก reboot ระบบ
เมื่อเราใช้ AMPRNet IP44 แล้วสิ่งที่จะลืมไม่ได้เลยคือการเปลี่ยนรหัสผ่านของ user และ root ไม่ให้เป็นค่าทั่วไป หรือสั้นเกินไป เพราะหมายเลข AMPRNet IP44 ที่เราได้รับมานี้เป็น IP แบบ Fixed IP ไม่เปลี่ยนแปลงซึ่งก็เปรียบเสมือเป้านิ่งให้เหล่า hacker ได้ทดสอบวิชากัน ยิ่งถ้าไม่มีระบบ Firewall ป้องกันการเข้าถึงด้วยแล้วยิ่งอันตรายมาก
ทำให้ AMPRNet IP44 เชื่อมต่ออัตโนมัติทุกครั้งที่ boot ระบบ (มี update ด้านล่างนะครับ แทนการทำในขั้นตอนนี้)
วิธีง่าย ๆ ที่จะทำให้ AMPRNet IP44 ของเราทำงานเองทุกครั้งที่ Raspberry Pi เริ่มทำงานก็คือการเพิ่ม script หรือคำสั่งต่าง ๆ เข้าไปในไฟล์ /etc/rc.local เพื่อสั่งให้ L2TP/IPSec เชื่อมต่อเข้ากับ VPN Server ซึ่งไฟล์ rc.local นี้จะทำงานทุกครั้งที่ boot ระบบขึ้นมา โดยใช้คำสั่ง pico แก้ไขไฟล์นี้ตามที่อยู่และชื่อของไฟล์
pico /etc/rc.local
เมื่อพิมพ์คำสั่งแล้วกด Enter จะเห็นข้อมูลในไฟล์ rc.local ซึ่งเดิมจะมีข้อมูล Script อยู่แล้ว ให้เพิ่มบรรทัดคำสั่งที่เราต้องการเพิ่มไปก่อนบรรทัด exit 0
ตัวอย่าง script ที่เพิ่มเข้าไป
sleep 10
L2TP_SERVER="81.31.234.70"
GATEWAY=$(/usr/sbin/route -n | /usr/bin/grep "^0.0.0.0" | /usr/bin/awk '{print $2}')
/usr/bin/ip route add $L2TP_SERVER via $GATEWAY
/usr/bin/ip route delete default
/usr/sbin/ipsec up L2TP-PSK
sleep 1
/usr/bin/echo "c myvpn" > /var/run/xl2tpd/l2tp-control
sleep 1
บรรทัด sleep 10 หรือ sleep 1 คือ ให้เครื่องรอการทำงานเป็นเวลา 10 หรือ 1 วินาที
บรรทัด L2TP_SERVER= คือกำหนดหมายเลข IP ของ Server ในการเชื่อมต่อไว้ที่ตัวแปร L2TP_SERVER
บรรทัด GATEWAY= คือหาค่า IP ของ router หลักแล้วเก็บไว้ในตัวแปร GATEWAY
/usr/bin/ip route add $L2TP_SERVER via $GATEWAY คือคำสั่งกำหนดเส้นทางของ VPN Server ให้วิ่งผ่าน router หลัก
/usr/bin/ip route delete default คือคำสั่งลบเส้นทางหลักในการออกอินเตอร์เน็ตออก เพื่อที่จะใช้เส้นทางใหม่ที่ผ่าน AMPRNet IP44
/usr/sbin/ipsec up L2TP-PSK คือคำสั่งที่ให้ L2TP เริ่มทำงาน
/usr/bin/echo “c myvpn” > /var/run/xl2tpd/l2tp-control คือคำสั่งที่ทำให้ ppp0 ซึ่งเป็นของ AMPRNet IP44 active หรือเริ่มทำงาน
ในการ copy แล้วมาคลิ๊กขวาเพื่อวางใน putty อาจจะต้อง copy ทีละบรรทัดนะครับ เพราะบางครั้งวางไปแล้วอาจจะไม่ตรงตามที่เราต้องการ หรืออาจจะต้องมีการจัดบรรทัดใหม่ให้เหมือนภาพด้านล่าง
หลังจากที่เพิ่มข้อมูลเข้าไปแล้วก็ทำการบันทึกโดยการกด Ctrl+O และ Ctrl+X เพื่อออกจากการแก้ไขแล้วทำการ reboot ระบบ หลังจากระบบ boot ขึ้นมาแล้วก็ใช้ putty เข้าไปทำการเช็คด้วยคำสั่ง route จะเห็นว่ามี Interface ppp0 ปรากฏอยู่ ซึ่งก็หมายความว่า ณ ตอนนี้ Raspberry pi ตัวนี้ใช้อินเตอร์เน็ต AMPRNet IP44 อยู่นั่นเอง
เทคนิคการใส่ script ไว้ในไฟล์ /etc/rc.local นี้ เป็นเพียงการสั่งให้มีการเชื่อมต่อ L2TP VPN ทุกครั้งที่มีการ boot ระบบขึ้นมาเท่านั้น ไม่ได้มีการตรวจสอบว่า L2TP VPN ที่เราเชื่อมต่อนั้นหลุดจากระบบหรือไม่ และไม่ได้มีการสั่งให้เชื่อมต่อใหม่
การทำ Script เพื่อให้มีการตรวจสอบ L2TP VPN เอง
อีกวิธีที่ผมทำขึ้นคือใช้การสั่งให้มีการเช็ค L2TP VPN ว่ายังทำงานอยู่หรือไม่ ถ้าไม่มีการเชื่อมต่อหรือไม่ได้หมายเลข IP44 มาก็จะตรวจสอบอินเตอร์เน็ตก่อนว่าปกติหรือไม่ ถ้าอินเตอร์เน็ตปกติ ก็จะสั่งให้มีการเชื่อมต่อ L2TP VPN ใหม่อีกครั้ง รวมถึงการสั่งให้มีการ restart service บางอย่างด้วยเช่น สั่งให้มีการ restart service svxlink ซึ่งเป็นบริการที่ใช้ทำระบบ Echolink ให้ login เข้าด้วยสิทธิ์ของ root นะครับ หรือถ้าไม่ได้เข้าด้วยสิทธิ์ของ root ก็ต้องใช้คำสั่ง sudo นำหน้าครับ
เริ่มจาก download script จากเว็บของ www.xlx822.com ครับ ให้ download ไว้ใน /root/ นะครับ
wget https://xlx822.com/download/check_ip44.sh -O /root/check_ip44.sh
หลังจากที่ download มาแล้ว ใช้คำสั่ง ls -l /root/ เพื่อตรวจสอบว่ามีไฟล์อยู่หรือไม่ ถ้ามีไฟล์อยู่ก็ทำขั้นตอนต่อไปก็คือการเปลี่ยนโหมดให้เป็นไฟล์แบบ run command ได้
chmod 755 /root/check_ip44.sh
ใช้คำสั่ง ls -l /root/check_ip44.sh อีกครั้ง เพื่อตรวจสอบว่าสิทธิ์ของไฟล์เป็นแบบ run ได้หรือไม่
ใน scirpt จะมีการตั้งค่าบางอย่าง อาจจะเข้าไปตรวจสอบการตั้งค่าภายใน script ได้โดยใช้คำสั่ง pico เพื่อแก้ไข
pico /root/check_ip44.sh
หากมีการแก้ไข script ก็ให้กดปุ่ม Ctrl+O แล้ว Enter เพื่อบันทึก และ Ctrl+X เพื่อออกจากการแก้ไข
ขณะนี้ script ของเราก็สามารถทำงานได้แล้ว ถ้าหากต้องการจะทดสอบ script ว่าทำงานหรือไม่ก็สามารถทำได้โดยระบุที่อยู่ของไฟล์ตามด้วยชื่อไฟล์ เช่น…
/root/check_ip44.sh
จะเห็นว่าผลที่ได้คือ
ppp0 is up หมายความว่า L2TP VPN นั้นทำงานอยู่แล้ว
ppp0 is default gateway หมายความว่า อินเตอร์เน็ตปัจจุบันนั้นออกทาง L2TP VPN
ppp0 ip 44.159.12.86 ก็คือแสดงหมายเลข IP ปัจจุบันของ L2TP VPN นั่นเอง
ต่อไปจะเป็นการสั่งให้ script ของเราทำงานทุก ๆ 2 นาที หรือกี่นาทีตามแต่ต้องการ โดยการแก้ไขระบบทำงานอัตโนมัติของระบบปฏิบัติการ Linux ก็คือการใช้คำสั่ง crontab -e เพื่อเข้าไปเพิ่มคำสั่ง
crontab -e
หากระบบมีการถามว่าจะใช้โปรแกรมอะไรเป็นตัวแก้ไข สังเกตุง่าย ๆ จะมีตัวเลขขึ้นมาให้เลือก ก็ให้เลือกเป็น 1 นะครับ แต่ถ้าเคยเลือกแล้วระบบจะไม่ถามอีก
หลังจากแก้ไขแล้วก็ทำการบันทึกโดยการกด Ctrl+O แล้วกด Enter เพื่อบันทึกและ Ctrl+X เพื่อออกจากการแก้ไข หลังจากออกจากการแก้ไขแล้วระบบก็จะตอบกลับมาว่ามีการติดตั้ง crontab เข้าไป
เนื่องจากในการนำไปใช้งานจริงสามารถประยุกต์ใช้ได้กับหลาย ๆ ระบบ เช่น Pi-Star, AMBE Server, DVSwitch Server, Allstarlink, Echolink หรือเป็นระบบ Debian ที่ติดตั้งบน PC แต่ละระบบก็อาจจะมีบางจุดแตกต่างกันออกไป ซึ่งหากติดตั้งแล้วพบปัญหาสามารถสอบถามที่ผม HS2BMI ผ่านทาง Line ID : aisfttx หรือ scan QRCode ก็ได้ครับ