OS:Ubuntu 12.04 64位
ศูนย์、บทนำ
DNS pollution:
การปนเปื้อนของแคชบนเซิร์ฟเวอร์ชื่อโดเมน (DNS cache pollution) หรือที่เรียกว่า DNS cache poisoning คือการที่มีแพ็กเก็ต DNS บางส่วนถูกสร้างขึ้นอย่างจงใจหรือโดยไม่ตั้งใจ แล้วทำให้โดเมนถูกชี้ไปยัง IP ที่ไม่ถูกต้อง โดยปกติแล้วบนอินเทอร์เน็ตจะมี DNS server ที่เชื่อถือได้อยู่แล้ว แต่เพื่อช่วยลดภาระของทราฟฟิกในเครือข่าย เซิร์ฟเวอร์ DNS มักจะเก็บผลการแปล (resolution records) จาก upstream ไว้ชั่วคราว เมื่อมีเครื่องอื่นในครั้งถัดไปต้องการแปลชื่อโดเมน ก็สามารถตอบกลับได้ทันที
หาก cache ของ DNS ในเครือข่ายท้องถิ่นถูกปนเปื้อน ก็จะทำให้คอมพิวเตอร์ในเครือข่ายถูกนำทางไปยังเซิร์ฟเวอร์หรือหน้าเว็บไซต์ที่ผิดพลาดได้ 1
OpenDNS:
OpenDNS ให้บริการ DNS solution สำหรับทั้งบุคคลและองค์กร ผู้ใช้สามารถเลือกใช้บริการของ OpenDNS หรือใช้ DNS ที่ ISP ในท้องถิ่นจัดให้ การวางกลุ่มเซิร์ฟเวอร์ในตำแหน่งเชิงยุทธศาสตร์และการใช้แคชจำนวนมากช่วยให้ขั้นตอนการค้นหา DNS เสร็จได้เร็วขึ้นมาก ส่งผลให้ความเร็วในการดึงข้อมูลหน้าเว็บเพิ่มขึ้นด้วย
ผลการค้นหา DNS บางครั้งอาจถูกแคชโดยระบบปฏิบัติการหรือแอปพลิเคชันในเครื่อง ดังนั้นการเพิ่มความเร็วอาจไม่เห็นชัดในทุกครั้งที่ค้นหา แต่ถ้าผลลัพธ์ที่ต้องการไม่อยู่ในแคชในเครื่อง การเพิ่มความเร็วจะเห็นได้ชัดเจนกว่า นอกจากนี้ยังมีคุณสมบัติอื่น เช่น ตัวกรองป้องกันฟิชชิง (anti-phishing) และการแก้ไขเมื่อพิมพ์ผิด (type correction) ตัวอย่างเช่น หากคุณพิมพ์ wikipedia.og ระบบจะเปลี่ยนเป็น wikipedia.org โดยอัตโนมัติ
โดยการรวบรวมรายชื่อเว็บไซต์ที่เป็นอันตราย เมื่อผู้ใช้เข้าถึงเว็บไซต์เหล่านั้นผ่านบริการของ OpenDNS OpenDNS จะบล็อกเว็บไซต์อันตรายเหล่านั้น OpenDNS ได้เปิดตัวบริการป้องกันฟิชชิง (PhishTank) เพื่อให้ผู้ใช้ทั่วโลกสามารถรายงานและตรวจดูเว็บไซต์ฟิชชิงที่ไม่น่าเชื่อถือได้
อย่างไรก็ตาม OpenDNS ไม่ใช่ซอฟต์แวร์โอเพนซอร์สอย่างที่ชื่อบอก มันไม่ได้เป็นซอฟต์แวร์แบบเปิดเผยโค้ด 2
ทำไม DNSCrypt ถึงช่วยป้องกัน DNS pollution
พูดแบบเข้าใจง่าย ๆ ก็ประมาณนี้
DNS แบบเดิมเป็นข้อความที่ส่งแบบไม่เข้ารหัส (plaintext) เหมือนกับ “โปสการ์ด” ใบหนึ่ง บนโปสการ์ดมีตำแหน่งที่คุณเขียนว่า “คุณคือใคร” “จะส่งให้ใคร” “กำลังถามข้อมูลอะไร” ดังนั้นคนที่รับหน้าที่ขนส่งโปสการ์ดจะมองเห็นสิ่งที่คุณเขียนได้ หากเขาไม่พอใจ เขาสามารถนำโปสการ์ดของคุณไปปลอมแปลงเนื้อหาแล้วส่งกลับไปหลอกคุณ (หรืออาจจะกั้นไว้ไม่ให้ถึงปลายทางเลยก็ได้ ตามที่เขาต้องการ)
ส่วนคำตอบที่ DNS server ส่งกลับมาหาคุณก็มีหลักการแบบเดียวกัน
แต่ DNSCrypt จะเข้ารหัสข้อมูล DNS สิ่งที่ “เขียนบนโปสการ์ด” จะเป็นภาษาที่คุณและ DNS server เข้าใจได้ แต่พนักงานไปรษณีย์และคนอื่นกลับอ่านไม่ออก ทำให้เขาคิดว่าเป็นอีเมลปกติ แล้วส่งถึงปลายทางแบบไม่เปลี่ยนแปลง
แน่นอน วันหนึ่งพนักงานไปรษณีย์อาจรู้สึกว่า “นี่ของ DNS server ดูไม่ค่อยปกตินะ” จากนั้นเขาก็อาจแก้ไขหรือทำลายจดหมายทั้งหมดที่ส่งถึงปลายทางสำหรับเซิร์ฟเวอร์นั้นได้เช่นกัน เพียงแต่ว่าตอนนี้ยังไม่ได้ทำแบบนั้น…
ที่มีคนพูดถึงการใช้ TCP นั้นไม่ใช่เหตุผลหลัก เพราะ DNS Crypt สามารถใช้ UDP ได้ ตัวเลือกของ TCP จึงเป็นเพียงฟังก์ชันเสริมเท่านั้น เพราะในเครือข่ายที่อัตราการสูญหายของแพ็กเก็ตสูง UDP อาจใช้งานได้ไม่ค่อยราบรื่นเท่าไร 3
Dnsmasq
Dnsmasq เป็นซอฟต์แวร์โอเพนซอร์สแบบเบา (lightweight) สำหรับทำ DNS forwarding และยังเป็น DHCP/TFTP server เขียนด้วยภาษา C Dnsmasq ออกแบบมาสำหรับเครือข่ายภายในบ้านหรือเครือข่ายขนาดเล็ก ใช้ทรัพยากรน้อยและตั้งค่าได้ง่าย รองรับแพลตฟอร์ม เช่น Debian, Fedora, Smoothwall, IP-Cop, floppyfw, Firebox, LEAF, Freesco, fli4l, CoyoteLinux และ Android รวมถึงมีการใช้งานในระบบเราท์เตอร์ dd-wrt และ openwrt ด้วย 4
Ubuntu
Ubuntu (สัทอักษรสากล: การออกเสียงภาษาอังกฤษ: /ʊˈbʊntuː/ ประมาณ uu-buun-too) เป็นระบบปฏิบัติการ GNU/Linux ที่เน้นแอปพลิเคชันฝั่งเดสก์ท็อป ชื่อมาจากคำว่า “ubuntu” ในภาษาซูลูหรือโคซ่าของแอฟริกาตอนใต้ (แปลว่าอูบุนตู) หมายถึง “ความเป็นมนุษย์” และ “การที่ฉันมีอยู่ก็เพราะทุกคนมีอยู่” ซึ่งสะท้อนค่านิยมแบบประเพณีของแอฟริกา
Ubuntu ถูกก่อตั้งโดย Mark Shuttleworth เวอร์ชันแรก—4.10 เผยแพร่เมื่อวันที่ 20 ตุลาคม 2004 โดยยึดตาม Debian เป็นแบบอย่าง แตกต่างจาก Debian ที่มีนโยบายการอัปเกรดแบบมั่นคง Ubuntu จะออกเวอร์ชันใหม่ทุก ๆ หกเดือน เพื่อให้ผู้ใช้ได้รับและใช้งานซอฟต์แวร์ใหม่ได้ทันเวลา วัตถุประสงค์ในการพัฒนา Ubuntu คือทำให้คอมพิวเตอร์ส่วนบุคคลใช้งานได้ง่ายขึ้น พร้อมทั้งมีเวอร์ชันสำหรับเซิร์ฟเวอร์ในเชิงธุรกิจ
Ubuntu แต่ละเวอร์ชันใหม่มักจะมีสภาพแวดล้อมเดสก์ท็อป GNOME ที่ทันสมัยที่สุดในขณะนั้น โดยปกติจะออกภายในหนึ่งเดือนหลังจาก GNOME เปิดตัวเวอร์ชันใหม่ เมื่อเทียบกับลินุกซ์ดิสทริบิวชันอื่นที่อิง Debian เช่น MEPIS, Xandros, Linspire, Progeny และ Libranet Ubuntu จะใกล้เคียงกับแนวคิดการพัฒนาของ Debian มากกว่า โดยเน้นใช้ซอฟต์แวร์เสรีและโอเพนซอร์สเป็นหลัก ขณะที่ดิสทริบิวชันอื่นมักมาพร้อมซอฟต์แวร์ที่ปิดโค้ดจำนวนมาก
Ubuntu ถูกสร้างบน Debian สาขาที่ไม่เสถียร ไม่ว่าจะเป็นรูปแบบแพ็กเกจ (deb) หรือระบบจัดการและติดตั้งซอฟต์แวร์ (Debian Apt) ผู้พัฒนาของ Ubuntu จะส่งข้อมูลการแก้ไขที่ทำกับซอฟต์แวร์ให้ชุมชน Debian ทันที ไม่ใช่ประกาศเฉพาะตอนออกเวอร์ชันใหม่ ในความเป็นจริง ผู้พัฒนา Ubuntu หลายคนยังเป็นผู้ดูแลซอฟต์แวร์หลักของ Debian อีกด้วย อย่างไรก็ตาม Debian และ Ubuntu อาจไม่เข้ากันได้ 100% นั่นคือ การติดตั้งแพ็กเกจของ Debian บน Ubuntu อาจเกิดปัญหาความเข้ากันได้ และในทางกลับกันก็เช่นเดียวกัน
การทำงานของ Ubuntu พึ่งพาการสนับสนุนจากบริษัท Canonical เป็นหลัก และยังได้รับความช่วยเหลือจากผู้ที่สนใจในชุมชน Linux อีกด้วย ผู้พัฒนามักเรียก Mark Shuttleworth ว่า SABDFL (ย่อมาจาก self-appointed benevolent dictator for life แปลว่า “ผู้เผด็จการใจดีตลอดชีพที่แต่งตั้งตัวเอง”) ในวันที่ 8 กรกฎาคม 2005 Mark Shuttleworth และ Canonical ประกาศการก่อตั้ง Ubuntu Foundation พร้อมเงินทุนเริ่มต้น 10 ล้านดอลลาร์สหรัฐฯ วัตถุประสงค์ของการตั้งมูลนิธิคือให้แน่ใจว่าในอนาคต Ubuntu จะสามารถพัฒนาอย่างต่อเนื่องและได้รับการสนับสนุนได้ แต่จนถึงปี 2006 มูลนิธินี้ยังไม่ได้เริ่มดำเนินการ Mark Shuttleworth อธิบายว่าการตั้งมูลนิธินี้เป็นเงินทุนฉุกเฉินในช่วงที่ Canonical เกิดวิกฤตด้านการเงิน
ในเวอร์ชันก่อนหน้า ผู้ใช้สามารถรับแผ่นติดตั้งฟรีผ่านบริการ shipit ได้ โดย Ubuntu 6.06 มีบริการ shipit ฟรี แต่หลังจากนั้น Ubuntu 6.10 ไม่มีบริการส่งแผ่นติดตั้งผ่าน shipit แบบฟรีอีกต่อไป ผู้ใช้ต้องดาวน์โหลดไฟล์อิมเมจแผ่นจากเว็บไซต์ แล้วไปไรท์เพื่อทำการติดตั้ง ในช่วงที่ Ubuntu 6.06 ออกมา มีข่าวว่าจะไม่ให้บริการ shipit สำหรับเวอร์ชันที่ไม่ใช่แบบ Long Term Support อย่างไรก็ตามเมื่อ Ubuntu 7.04 เปิดตัว บริการ shipit ก็กลับมาอีกครั้ง แต่เวอร์ชันนี้ก็ยังไม่ใช่ LTS ก่อนถึงช่วงเปิดตัว Ubuntu 11.04 บริการ shipit ก็ถูกหยุดไปแล้ว
ปัจจุบัน Ubuntu มี LTS อยู่ 5 เวอร์ชัน (Long Term Support, LTS): Ubuntu 6.06, 8.04, 10.04, 12.04 และ 14.04 Ubuntu 12.04 และ 14.04 ทั้งรุ่นเดสก์ท็อปและเซิร์ฟเวอร์มีรอบการสนับสนุน 5 ปี ส่วน LTS ก่อนหน้าคือเดสก์ท็อป 3 ปี และเซิร์ฟเวอร์ 5 ปี 5
รายการการออกเวอร์ชัน Ubuntu: 6
รายการการออกเวอร์ชัน Ubuntu
| เวอร์ชัน | รหัสชื่อ | ความหมายภาษาไทย |
| Ubuntu 4.10 | Warty Warthog | หมูป่าที่เต็มไปด้วยรอยด่าง |
| Ubuntu 5.04 | Hoary Hedgehog | เม่นหัวขาว |
| Ubuntu 5.10 | Breezy Badger | แบดเจอร์อารมณ์สบาย ๆ |
| Ubuntu 6.06 | LTS Dapper Drake | เป็ดตัวผู้ดูดีมีสไตล์ |
| Ubuntu 6.10 | Edgy Eft | จิ้งจกเล็กที่คมและไว |
| Ubuntu 7.04 | Feisty Fawn | กวางตัวน้อยที่ใจสู้ |
| Ubuntu 7.10 | Gutsy Gibbon | ลิงค่างที่กล้าหาญ |
| Ubuntu 8.04 | LTS Hardy Heron | นกกระสาแข็งแรง |
| Ubuntu 8.10 | Intrepid Ibex | แพะภูเขาที่ไม่กลัว |
| Ubuntu 9.04 | Jaunty Jackalope | กระต่ายแจ็คคาปโลเปที่ภูมิใจ |
| Ubuntu 9.10 | Karmic Koala | โคอาล่าที่โชคดี |
| Ubuntu 10.04 | LTS Lucid Lynx | ลินซ์ที่ชัดเจนและเข้าใจง่าย |
| Ubuntu 10.10 | Maverick Meerkat | มีสไตล์แบบไม่เหมือนใคร |
| Ubuntu 11.04 | Natty Narwhal | นาร์วาลที่ว่องไว |
| Ubuntu 11.10 | Oneiric Ocelot | โอเซล็อตในฝัน |
| Ubuntu 12.04 | LTS Precise Pangolin | มังกรเกราะที่แม่นยำ |
| Ubuntu 12.10 | Quantal Quetzal | เกวทซัลแบบควอนตัล |
| Ubuntu 13.04 | Raring Ringtail | แมวหางวงแหวนที่พร้อมลุย |
| Ubuntu 13.10 | Saucy Salamander | ซาลาแมนเดอร์ตัวกวน |
| Ubuntu 14.04 | LTS Trusty Tahr | แทร์ที่น่าเชื่อถือ |
| Ubuntu 14.10 | Utopic Unicorn | ยูนิคอร์นแห่งอุดมคติ |
หนึ่ง、ตั้งค่า PPA
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:shnatsel/dnscrypt
สอง、ติดตั้ง DNSCrypt Proxy
การติดตั้ง:
sudo apt-get update
sudo apt-get install dnscrypt-proxy
การตั้งค่า:
เนื่องจาก DNSCrypt มีพอร์ตเริ่มต้น 53 จะชนกับ DNSMasq ดังนั้นเราต้องเปลี่ยนพอร์ตเป็นพอร์ตอื่น เช่น เปลี่ยนเป็น 40
แก้ไข /etc/default/dnscrypt-proxy 7 โดยค้นหาในบรรทัดนั้น และเปลี่ยนพอร์ตเป็น 40 แน่นอนว่าคุณสามารถเปลี่ยนเป็นพอร์ตอื่นได้เช่นกัน ตราบใดที่ไม่ไปชนกับพอร์ตอื่นของระบบ:
# What local IP the daemon will listen to, with an optional port. The default port is 53.
local
-address=127.0.0.2:40
ทดสอบ:
$ sudo service dnscrypt-proxy restart
dnscrypt-proxy stop/waiting
dnscrypt-proxy start/running, process 1561
$ dig g.cn @127.0
.0.2 -p 40
; > DiG 9.8
.1-P1 <<>> g.cn @127.0.0.2 -p 40;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30656
;; flags: qr rd ra; QUERY: 1
, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0
, flags:; udp: 4096;; QUESTION SECTION:
;g.cn. IN A
;; ANSWER SECTION:
g.cn. 227
IN A 203.208.48.148g.cn. 227
IN A 203.208.48.144g.cn. 227
IN A 203.208.48.145g.cn. 227
IN A 203.208.48.146g.cn. 227
IN A 203.208.48.147
;; Query time: 113
msec;; SERVER: 127.0
.0.2#40(127.0.0.2);; WHEN: Sun Aug 23
22:28:37 2015;; MSG SIZE rcvd: 113
อธิบาย:
DNSCrypt มี 3 โหมดการทำงาน:
โหมด command line: เรียกคำสั่งสตาร์ตด้วยพารามิเตอร์ใน command line โดยตรง 8
รองรับคำสั่งดังนี้:
$ dnscrypt-proxy --help
dnscrypt-proxy 1.4
.0
Options:
-a
--local-address=... # 监听的地址,例如: 127.0.0.1:53 -d
--Daemonize模式 # 守护进程模式 -e
--edns-payload-size=... # 后面略,详情见官方文档[^2] -h --help
-L --resolvers-list=...
-R --resolver-name=...
-l
--logfile=... -m --loglevel=...
-n --max-active-requests=...
-p --pidfile=...
-X --plugin=...
-N --provider-name=...
-k --provider-key=...
-r --resolver-address=...
-u --user=...
-t --test=...
-T --tcp-only
-V --version
Please consult the dnscrypt-proxy(8
) man page for details.
โหมด Daemonize: ทำงานเป็นกระบวนการเบื้องหลัง
สามารถสตาร์ตได้ทันทีด้วย sudo dnscrypt-proxy -d ไม่ต้องตั้งค่า command line parameters ใด ๆ พารามิเตอร์ทั้งหมดจะอ่านจากไฟล์กำหนดค่า /etc/default/dnscrypt-proxy
โหมดบริการระบบ:เป็นโหมดเริ่มต้น
หลังติดตั้งเสร็จ หรือเมื่อระบบเริ่มทำงาน จะเริ่มโดยอัตโนมัติ เช่นเดียวกับ Daemonize mode พารามิเตอร์การเริ่มจะถูกอ่านจากไฟล์กำหนดค่า /etc/default/dnscrypt-proxy
- หยุด:
sudo service dnscrypt stop - เริ่ม:
sudo service dnscrypt start - รีสตาร์ท:
sudo service dnscrypt restart
สอง、ติดตั้ง DNSMasq
การติดตั้ง:
sudo apt-get update
sudo apt-get -y install dnsmasq
การตั้งค่า:
แก้ไขไฟล์กำหนดค่า /etc/dnsmasq.conf เนื้อหาในไฟล์สามารถปรับได้ตามต้องการ ในที่นี้ไม่ขออธิบายรายละเอียดหน้าที่ของแต่ละตัวเลือกและข้อควรระวัง ทั้งหมดดูได้จาก google 9 แต่ ณ จุดนี้ให้แก้เพียง 1 บรรทัด คือกำหนด upstream server ของ DNSMasq ให้เป็น DNSCrypt-Proxy ที่เราตั้งค่าก่อนหน้านี้
ค้นหาแล้วเปลี่ยนให้เป็นแบบนี้:
# You can control how dnsmasq talks to a server: this forces
# queries to 10.1.2.3 to be routed via eth1
# server=10.1.2.3@eth1
server=127.0
.0.2#40
ทดสอบ
โปรดทราบว่า port ที่นี่คือ -p 53 ซึ่งต่างจาก dnscrpyt-proxy ของ -p 40 ที่ได้อธิบายไว้ก่อนหน้า
$ sudo service dnsmasq restart
Stopped Name Service Cache Daemon: nscd.
* Starting Name Service Cache Daemon nscd [ OK ]
* Restarting DNS forwarder and DHCP server dnsmasq [ OK ]
Stopped Name Service Cache Daemon: nscd.
* Starting Name Service Cache Daemon nscd [ OK ]
$ dig g.cn @127.0
.0.1 -p 53
; > DiG 9.8
.1-P1 <<>> g.cn @127.0.0.1 -p 53;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52188
;; flags: qr rd ra; QUERY: 1
, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0
, flags:; udp: 4096;; QUESTION SECTION:
;g.cn. IN A
;; ANSWER SECTION:
g.cn. 295
IN A 203.208.48.144g.cn. 295
IN A 203.208.48.146g.cn. 295
IN A 203.208.48.148g.cn. 295
IN A 203.208.48.145g.cn. 295
IN A 203.208.48.147
;; Query time: 113
msec;; SERVER: 127.0
.0.1#53(127.0.0.1);; WHEN: Sun Aug 23
22:41:00 2015;; MSG SIZE rcvd: 113
อธิบาย:
dnsmasq ก็สามารถใช้อัพสตรีมเซิร์ฟเวอร์อื่นได้เช่น 8.8.8.8 และ 114.114.114.114 โดยปกติ dnsmasq จะฟังพอร์ตจากภายนอกอยู่แล้ว ดังนั้นไม่จำเป็นต้องตั้งค่า IP ที่จะให้ฟังเป็นพิเศษ คุณสามารถทดสอบโดยเข้าไปที่ external IP ได้เลย ตัวอย่างเช่น
nslookup g.cn 192.168
.31.139
สาม、ทดสอบความมีประสิทธิภาพของ OpenDNS
เข้าไปที่ OpenDNS的测试页面 หากคุณเห็นเครื่องหมายถูก แสดงว่าการตั้งค่าประสบความสำเร็จ หากมีปัญหาก็ฝากข้อความไว้ได้ :)
1.
DNS cache pollution, Wikipedia:https://zh.wikipedia.org/wiki/域名服务器缓存污染↩ 2.
OpenDNS, Wikipedia:https://zh.wikipedia.org/wiki/OpenDNS↩ 3.
DNSCrypt ทำงานอย่างไร? และทำไมถึงป้องกัน DNS pollution ได้?,知乎:http://www.zhihu.com/question/24253866/answer/29272628↩ 4.
Dnsmasq, Wikipedia:https://zh.wikipedia.org/wiki/Dnsmasq↩ 5.
Ubuntu, Wikipedia:https://zh.wikipedia.org/wiki/Ubuntu↩ 6.
รายการเวอร์ชันของ Ubuntu, Wikipedia:https://zh.wikipedia.org/wiki/Ubuntu发行版列表↩ 7.
ไฟล์นี้สร้างขึ้นโดยอัตโนมัติขณะติดตั้ง DNSCrypt ↩ 8.
นี่คือรูปแบบการ start มาตรฐานตามเอกสาร ดูรายละเอียดจากคู่มือทางการ:https://github.com/jedisct1/dnscrypt-proxy#usage↩ 9.
การตั้งค่า DNSMasq:https://www.google.com/search?q=dnsmasq.conf%20%E7%9A%84#newwindow=1&safe=active&q=dnsmasq.conf+%E9%85%8D%E7%BD%AE↩