วิธีที่ดีที่สุดคือผ่านโซนนโยบายการตอบสนองใน Bind 9.8.1 หรือใหม่กว่า จะช่วยให้คุณสามารถแทนที่ระเบียนเดียวในโซนโดยพลการ (และไม่จำเป็นต้องสร้างทั้งโดเมนย่อยสำหรับเฉพาะระเบียนเดียวที่คุณต้องการเปลี่ยน) จะช่วยให้คุณสามารถแทนที่ CNAMEs ฯลฯ โซลูชั่นอื่น ๆ เช่น Unbound ไม่สามารถแทนที่ CNAME .
https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html
แก้ไข:เรามาทำอย่างถูกต้องแล้ว ฉันจะบันทึกสิ่งที่ฉันทำตามบทช่วยสอนที่ลิงก์ด้านบน
ระบบปฏิบัติการของฉันคือ Raspbian 4.4 สำหรับ Raspberry Pi แต่เทคนิคควรใช้งานได้โดยไม่มีการเปลี่ยนแปลงบน Debian และ Ubuntu หรือมีการเปลี่ยนแปลงเล็กน้อยบนแพลตฟอร์มอื่น ๆ
ไปที่ config ไฟล์ผูกของคุณจะถูกเก็บไว้ในระบบของคุณ - /etc/bind
นี่มันอยู่ใน สร้างในที่นั่นไฟล์ที่เรียกว่าdb.rpz
มีเนื้อหาดังต่อไปนี้:
$TTL 60
@ IN SOA localhost. root.localhost. (
2015112501 ; serial
1h ; refresh
30m ; retry
1w ; expiry
30m) ; minimum
IN NS localhost.
localhost A 127.0.0.1
www.some-website.com A 127.0.0.1
www.other-website.com CNAME fake-hostname.com.
มันทำอะไร?
- มันจะแทนที่ที่อยู่ IP สำหรับ
www.some-website.com
ด้วยที่อยู่ปลอม127.0.0.1
ส่งการรับส่งข้อมูลทั้งหมดสำหรับไซต์นั้นไปยังที่อยู่ย้อนกลับอย่างมีประสิทธิภาพ
- มันส่งปริมาณการใช้งาน
www.other-website.com
ไปยังไซต์อื่นที่เรียกว่าfake-hostname.com
สิ่งใดก็ตามที่สามารถไปในไฟล์โซน Bind คุณสามารถใช้ที่นี่
หากต้องการเปิดใช้งานการเปลี่ยนแปลงเหล่านี้มีขั้นตอนเพิ่มเติมไม่กี่ขั้นตอน
แก้ไขnamed.conf.local
และเพิ่มส่วนนี้:
zone "rpz" {
type master;
file "/etc/bind/db.rpz";
};
บทแนะนำที่เชื่อมโยงข้างต้นบอกให้คุณเพิ่มสิ่งอื่น ๆ ลงไปzone "rpz" { }
แต่ไม่จำเป็นในการตั้งค่าแบบง่าย ๆ - สิ่งที่ฉันได้แสดงไว้ที่นี่เป็นขั้นต่ำเพื่อให้สามารถทำงานกับตัวแก้ไขค่าท้องถิ่นของคุณได้
แก้ไขnamed.conf.options
และบางแห่งในoptions { }
ส่วนเพิ่มresponse-policy
ตัวเลือก:
options {
// bunch
// of
// stuff
// please
// ignore
response-policy { zone "rpz"; };
}
ตอนนี้เริ่มผูกใหม่:
service bind9 restart
แค่นั้นแหละ. เนมเซิร์ฟเวอร์ควรเริ่มต้นแทนที่ระเบียนเหล่านั้นทันที
หากคุณต้องการทำการเปลี่ยนแปลงเพียงแก้ไขdb.rpz
จากนั้นเริ่มการผูกอีกครั้ง
โบนัส: หากคุณต้องการบันทึกการสืบค้น DNS ไปยัง syslog ดังนั้นคุณสามารถติดตามการดำเนินการแก้ไขnamed.conf.local
และตรวจสอบให้แน่ใจว่ามีlogging
ส่วนที่มีข้อความเหล่านี้อยู่:
logging {
// stuff
// already
// there
channel my_syslog {
syslog daemon;
severity info;
};
category queries { my_syslog; };
};
รีสตาร์ท Bind อีกครั้งและนั่นแหละ
ทดสอบบนเครื่องที่รัน Bind:
dig @127.0.0.1 www.other-website.com. any
หากคุณเรียกใช้ dig บนเครื่องอื่นให้ใช้ @ the-ip-address-of-Bind-server แทน @ 127.0.0.1
ฉันใช้เทคนิคนี้ด้วยความสำเร็จที่ยิ่งใหญ่ในการแทนที่ CNAME สำหรับเว็บไซต์ที่ฉันทำงานอยู่ส่งไปยัง load balancer AWS ใหม่ที่ฉันเพิ่งทดสอบ Raspberry Pi ใช้เพื่อเรียกใช้ Bind และ RPi ก็ถูกกำหนดค่าให้ทำงานเป็นเราเตอร์ WiFi ด้วยการเชื่อมต่ออุปกรณ์กับ SSID ที่ทำงานบน RPi ฉันจะได้รับการแทนที่ DNS ที่ฉันต้องการสำหรับการทดสอบ