ไม่สามารถเปลี่ยนเส้นทางการค้นหา DNS IP และพอร์ตได้


21

ฉันได้ค้นพบว่า ISP ของฉัน (verizon) กำลังสกัดกั้นการรับส่งข้อมูล DNS ทั้งหมดบนพอร์ต 53

ใช้ iptables ฉันต้องการเปลี่ยนเส้นทางการค้นหา DNS ทั้งหมดไปยัง IP และพอร์ตเฉพาะ (5353) ความพยายามใด ๆ ที่ทำให้คอมพิวเตอร์ของฉันเชื่อมต่อกับคอมพิวเตอร์เครื่องอื่นที่พอร์ต 53 ควรถูกเปลี่ยนเส้นทางไปที่ 23.226.230.72/5353

เพื่อตรวจสอบเซิร์ฟเวอร์ DNS และพอร์ตที่ฉันพยายามจะใช้ฉันได้รันคำสั่งนี้

~$ dig +short serverfault.com @23.226.230.72 -p5353
198.252.206.16

นี่เป็นกฎ iptables ที่ฉันพยายามใช้

iptables -t nat -A OUTPUT -p udp -m udp --dport 53 -j DNAT --to-destination 23.226.230.72:5353

หลังจากเพิ่มกฎนั้นจะไม่พบการค้นหา DNS ทั้งหมด unknown hostผลตอบแทนจากการส่ง Ping เว็บไซต์ หน้าเว็บบอกว่า 'ไม่พบเซิร์ฟเวอร์'

~$ mtr serverfault.com
Failed to resolve host: Name or service not known

ฉันต้องการให้ DNS ของฉันดึงการค้นหาจาก 23.226.230.72/5353 ฉันจะทำให้กฎ iptables ทำงานได้อย่างไร

แก้ไข

การสาธิตการสกัดกั้น DNS (พอร์ต 53) โดย ISP ของฉัน ติดตามเอาต์พุตจาก dig ถึง 23.226.230.72 ผ่านทางพอร์ต 5353 จากนั้นพอร์ต 53

~$ dig +trace stackexchange.com @23.226.230.72 -p5353

; <<>> DiG 9.9.5-3-Ubuntu <<>> +trace stackexchange.com @23.226.230.72 -p5353
;; global options: +cmd
.           86395   IN  NS  ns7.opennic.glue.
.           86395   IN  NS  ns4.opennic.glue.
.           86395   IN  NS  ns3.opennic.glue.
.           86395   IN  NS  ns5.opennic.glue.
.           86395   IN  NS  ns2.opennic.glue.
.           86395   IN  NS  ns10.opennic.glue.
.           86395   IN  NS  ns1.opennic.glue.
.           86395   IN  NS  ns6.opennic.glue.
.           86395   IN  NS  ns8.opennic.glue.
dig: couldn't get address for 'ns8.opennic.glue': no more


~$ dig +trace stackexchange.com @23.226.230.72 -p53

; <<>> DiG 9.9.5-3-Ubuntu <<>> +trace stackexchange.com @23.226.230.72 -p53
;; global options: +cmd
.           7440    IN  NS  f.root-servers.net.
.           7440    IN  NS  d.root-servers.net.
.           7440    IN  NS  j.root-servers.net.
.           7440    IN  NS  i.root-servers.net.
.           7440    IN  NS  g.root-servers.net.
.           7440    IN  NS  k.root-servers.net.
.           7440    IN  NS  a.root-servers.net.
.           7440    IN  NS  h.root-servers.net.
.           7440    IN  NS  e.root-servers.net.
.           7440    IN  NS  m.root-servers.net.
.           7440    IN  NS  c.root-servers.net.
.           7440    IN  NS  b.root-servers.net.
.           7440    IN  NS  l.root-servers.net.
;; Received 239 bytes from 23.226.230.72#53(23.226.230.72) in 2948 ms

stackexchange.com.  215 IN  A   198.252.206.16
;; Received 62 bytes from 192.228.79.201#53(b.root-servers.net) in 116 ms

iptables ปัจจุบันของฉัน iptables-save

~# iptables-save
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*mangle
:PREROUTING ACCEPT [79950528:41742899703]
:INPUT ACCEPT [78748282:41360159554]
:FORWARD ACCEPT [13:5427]
:OUTPUT ACCEPT [85455483:57472640071]
:POSTROUTING ACCEPT [85480442:57475512901]
-A POSTROUTING -o lxcbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Tue Jul 15 23:06:52 2014
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*nat
:PREROUTING ACCEPT [71:18713]
:INPUT ACCEPT [7:474]
:OUTPUT ACCEPT [109:7855]
:POSTROUTING ACCEPT [109:7855]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -d 172.17.0.0/16 -j MASQUERADE
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT
# Completed on Tue Jul 15 23:06:52 2014
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*filter
:INPUT ACCEPT [78748139:41360144354]
:FORWARD ACCEPT [13:5427]
:OUTPUT ACCEPT [85454926:57472600172]
:fail2ban-ssh - [0:0]
:fail2ban-vsftpd - [0:0]
-A INPUT -p tcp -m multiport --dports 21,20,990,989 -j fail2ban-vsftpd
-A INPUT -p tcp -m multiport --dports 22,6622 -j fail2ban-ssh
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 67 -j ACCEPT
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT
-A fail2ban-ssh -j RETURN
-A fail2ban-vsftpd -j RETURN
COMMIT

คุณกำลังพยายามเปลี่ยนเส้นทางการรับส่งข้อมูลพอร์ต 53 ไปยัง IP นั้น (23.226.230.72) และพอร์ต (5353) หรือไม่
ทาโชมิ

กรุณาโพสต์iptables rulesที่นี่
Networker

@tachomi ถูกต้อง
Rucent88

หรือคุณไม่สามารถใช้ DNS ของ ISP ของคุณ ... เซิร์ฟเวอร์ DNS สาธารณะของ Google 8.8.8.8และ8.8.4.4
ห้วย

@ ลำห้วยฉันคิดว่าคุณเข้าใจผิด isp ของฉันสกัดกั้นการรับส่งข้อมูลทั้งหมดผ่านพอร์ต 53 แม้ว่าฉันต้องการใช้เซิร์ฟเวอร์ google dns แต่ฉันไม่สามารถเข้าถึงได้
Rucent88

คำตอบ:


12

ทำตามคำแนะนำทั้งหมดนี้ในฐานะรูท (sudo)

แก้ไขไฟล์นี้

/etc/NetworkManager/NetworkManager.conf

dnsmasq dns=dnsmasqปิดการใช้งานโดยการแสดงความคิดเห็นออกบรรทัด วาง#ด้านหน้าของบรรทัด

#dns=dnsmasq

รีสตาร์ทเครือข่ายของคุณ

service network-manager restart

เพิ่มกฎ iptable เหล่านี้

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 23.226.230.72:5353
iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 23.226.230.72:5353

2
โซลูชันนี้อัปเดตกับระบบปฏิบัติการและใช้ทรัพยากรเป็นศูนย์และไม่มีความเสี่ยงด้านความปลอดภัยการติดตั้งง่ายสุดพร้อมบูตสคริปต์และการบำรุงรักษาที่ไม่มีศูนย์ ข้อเสียคือมันไม่ยืดหยุ่นมาก
Rucent88

3

ดูเหมือนว่าสิ่งที่คุณเป็นจริงหลังจากนั้นคือการควบคุมสิ่งที่เกิดขึ้นกับการสืบค้น DNS ของคุณ

ฉันไม่แน่ใจว่าการใช้ iptables จะเป็นทางออกที่ฉันต้องการ

คุณคิดเกี่ยวกับการตั้งค่าเซิร์ฟเวอร์ DNS ในตัวที่ส่งต่อการร้องขอไปยังโฮสต์และพอร์ตที่คุณต้องการหรือไม่ ตัวอย่างหนึ่ง: การใช้ตัวเลือกการส่งต่อ bind9 คุณสามารถเพิ่มพอร์ตให้กับผู้ส่ง

การตั้งค่าดังกล่าวนั้นง่ายกว่าในการบำรุงรักษาและแก้ไขปัญหาและอาจยืดหยุ่นได้มากกว่า พิจารณาข้อดีของการแคชหรือพิจารณากรณีที่เซิร์ฟเวอร์ DNS ภายนอกของคุณไม่ทำงาน คุณสามารถมีผู้ส่งหลายคนในการกำหนดค่า DNS ของคุณ แต่มีเพียง IP เดียวในกฎ iptables ...

มีภาพรวมที่ดีของการติดตั้งของ bind9 คือในการกวดวิชาที่มหาสมุทรดิจิตอล เพียงแค่เพิ่มพอร์ตให้กับผู้ส่งและคุณควรจะตั้งค่าทั้งหมด

Bind9 ไม่กินทรัพยากรมากเลยและถูกกำหนดค่าอย่างง่ายดาย (หรืออย่างน้อย: ง่ายกว่า iptables :-))


Ooh และไม่จำเป็นต้องพูดว่าในการตั้งค่านั้นอย่าลืมตั้งค่าอุปกรณ์ของคุณเพื่อใช้เซิร์ฟเวอร์ DNS ในพื้นที่ของคุณและส่งต่อ
Vincent De Baere

ฉันมีเซิร์ฟเวอร์ DNS ที่ทำงานอยู่ แต่ไม่น่าเชื่อถือ (ฮาร์ดแวร์ขยะ) การรักษาความปลอดภัยให้ทันสมัยอยู่เสมอเป็นสิ่งที่เจ็บปวด มันใช้เวลาทรัพยากรไฟฟ้าและในที่สุดก็เตะถัง หากฉันมีคอมพิวเตอร์หลายร้อยเครื่องที่อยู่เบื้องหลังเครือข่ายขององค์กรฉันยอมรับว่าเซิร์ฟเวอร์ DNS จะเป็นแนวคิดที่ดี แต่ฉันแค่แล็ปท็อปคนเดียว กฎ iptable คู่ควรเป็นทรัพยากรที่ง่ายที่สุดและต่ำที่สุด
Rucent88

เพียงแค่เพิ่มลงในแล็ปท็อปของคุณมันแทบจะไม่มีทรัพยากรเลยและมันจะได้รับการอัพเดตด้วยระบบปฏิบัติการหลักของคุณ ความเสี่ยงด้านความปลอดภัยเกือบเป็นศูนย์
Vincent De Baere

IMHO เป็นวิธีที่ดีกว่าในการรักษาสถานการณ์ไว้ใน 99% ของคดีทั้งหมด เพียง 1% ที่ไม่ได้ใช้คือเมื่อคุณกำหนดค่าระบบ Captive Portal แต่นั่นเป็นอีกเรื่องหนึ่ง
ivanleoncz

2

ลองสิ่งนี้:

ก่อนอื่นคุณต้องเปิดใช้งานตัวเลือกการส่งต่อใน

/etc/sysctl.conf

ตั้งค่าหนึ่งค่าเป็น

net.ipv4.ip_forward = 1

เปิดใช้งานการเปลี่ยนแปลง

sysctl -p 

บันทึกและเรียกใช้สิ่งต่อไปนี้:

iptables -t nat -A PREROUTING -p tcp --sport 53 -j DNAT --to-destination 23.226.230.72:5353
iptables -t nat -A POSTROUTING -j MASQUERADE

หากคุณสามารถระบุ in-interface (-i eth1) ใน PREROUTING หรือ / และ out-interfect (-o eth0) ใน POSTROUTING อาจมีประโยชน์

หมายเหตุ: จำเป็นต้องมีสาย MASQUARADE ในขณะที่ปิดบัง IP ปลายทางด้วย IP หลัก


ฉันใส่ในsysctl net.ipv4.ip_forward=1และกฎ iptables DNS ใช้งานได้ แต่ isp ของฉันยังถูกดักจับอยู่ นั่นบ่งบอกว่า DNS ยังคงถูกส่งผ่านพอร์ต 53
Rucent88

ฉันเปลี่ยนกฎของคุณเป็นudpแต่ได้ผลลัพธ์เดียวกัน
Rucent88

คุณช่วยวางเอาท์พุทของ iptables-save ได้ไหม สิ่งที่ฉันอาจเป็นได้คือการปิดบังของคุณเฉพาะ MASQUERADE ที่ระบุทั้งหมด - 10.0.3.0/24 ดังนั้นหากคุณสามารถปิดการใช้งานบรรทัดนั้นและปล่อยให้ -A POSTROUTING -j MASQUERADE อันที่หนึ่งจะเป็นประโยชน์
tachomi

ฉันเพิ่มข้อมูลที่คุณร้องขอ
Rucent88

ตกลงมาทำความเข้าใจกันสักหน่อย .... พอร์ต 53 ทั้งหมดที่มีการรับส่งข้อมูลคือสิ่งที่คุณต้องการเปลี่ยนเส้นทางไปยัง 23.226.230.72 หรือสิ่งที่ดีกว่า?
ทาโชมิ

1

ลองสิ่งนี้:

iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 23.226.230.72:5353;

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 23.226.230.72:5353;

iptables -t nat -A POSTROUTING -j MASQUERADE

มันหมายถึง:
1) ผู้ใช้ท้องถิ่นที่ติดต่อกับโลกภายนอกไปยังพอร์ต tcp 53 ส่งไปที่ 23.226.230.72 ที่พอร์ต 5353
2) เช่นเดียวกับ 1 แต่สำหรับ udp
3) ตั้งค่าแหล่งข้อมูลบนแพ็กเก็ตขาออกเช่นเดียวกับที่มาจากเรา


0
iptables -t nat -A PREROUTING -p tcp --dport 53 -j DNAT --to XX.XX.XX.XX:5353
iptables -t nat -A PREROUTING -p udp  --dport 53 -j DNAT --to XX.XX.XX.XX:5353
iptables -t nat -A POSTROUTING -j MASQUERADE

ความจริงที่ว่าคำตอบนี้ไม่ได้พูดถึง "5353" ทำให้ฉันเชื่อว่ามันผิดโดยอัตโนมัติ
G-Man กล่าวว่า 'Reinstate Monica'

แก้ไข .........
Zibri

ตกลงฉันจะดูคำตอบของคุณ ดูเหมือนจะคล้ายกันมากกับคำตอบของ tachomiยกเว้น (1) คุณได้เปลี่ยนsportเป็น  dport(นี่คือข้อผิดพลาดในคำตอบของtachomiที่battman622 ชี้ให้เห็นเมื่อสามปีที่แล้ว (2) คุณเพิ่มบรรทัด (command) สำหรับudp(นี่คือ การปรับปรุงที่ถูกต้องตามกฎหมายสำหรับคำตอบของ Tachomi แต่สิ่งหนึ่งที่ถูกกล่าวถึงแล้วในความคิดเห็น  ... (ต่อ)
G-Man กล่าวว่า 'Reinstate Monica'

(ต่อ) ... และคำตอบอื่น ๆ หลาย ๆ คน) และ (3) คุณแทนที่ด้วย  --to-destinationหน้าคนไม่ได้พูดอย่างนั้นและ  เทียบเท่า; ในทางตรงกันข้ามมันบอกว่าใช้กับเป้าหมาย (ตรงข้ามกับ  เป้าหมาย) และอาร์กิวเมนต์นั้นไม่รวมหมายเลขพอร์ต (แม้ว่าฉันจะสังเกตเห็นว่ามีคำตอบอีกสองสามข้อที่ใช้ในแบบที่คุณทำ) คุณแน่ใจหรือไม่ว่าวิธีนี้ใช้งานได้ดี (กับหมายเลขพอร์ตกับ  เป้าหมาย) … (ต่อ)--to--to--to-destination--toNETMAPDNAT--to--toDNAT
G-Man พูดว่า 'Reinstate Monica'

(ต่อ) ... (ถ้าเป็นเช่นนั้นอาจมีใครบางคนควรส่งคำขอเปลี่ยนแปลงไปยังผู้ดูแลของหน้าคน)  --toดีกว่า   --to-destinationในทางอื่นนอกจากความกะทัดรัดหรือไม่?
G-Man กล่าวว่า 'Reinstate Monica'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.