Iptables để chuyển hướng IP và cổng tra cứu DNS


21

Tôi đã phát hiện ra rằng ISP của tôi (verizon) đang chặn tất cả lưu lượng DNS trên cổng 53.

Sử dụng iptables, tôi muốn chuyển hướng tất cả lưu lượng tra cứu DNS đến một IP và Cổng cụ thể (5353). Bất kỳ nỗ lực nào để máy tính của tôi kết nối với máy tính khác trên cổng 53 nên được chuyển hướng đến 23.226.230.72 giáp353.

Để xác minh máy chủ DNS và cổng tôi đang cố sử dụng, tôi đã chạy lệnh này.

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

Đây là quy tắc iptables tôi đang cố gắng sử dụng.

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

Sau khi thêm quy tắc đó, tất cả các tra cứu DNS không được tìm thấy. Trang web ping trở lại unknown host. Các trang web nói 'Không tìm thấy máy chủ'.

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

Tôi muốn DNS của mình được tra cứu được kéo từ 23.226.230.72 giáp353. Làm thế nào tôi có thể làm cho quy tắc iptables hoạt động?

CHỈNH SỬA

Trình diễn việc chặn DNS (cổng 53) bởi ISP của tôi. Theo dõi đầu ra từ đào đến 23.226.230.72 qua cổng 5353, và sau đó là cổng 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 hiện tại của tôi. 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

Vì vậy, bạn đang cố gắng chuyển hướng tất cả lưu lượng truy cập cổng 53 sang IP đó (23.226.230.72) và Cổng (5353)?
tachomi

xin vui lòng gửi của bạn iptables rulesở đây
Networker

@tachomi Đúng
Rucent88

Hoặc bạn không thể sử dụng DNS của ISP ... Các máy chủ DNS công cộng của Google 8.8.8.88.8.4.4
Lạch

@Calet Tôi nghĩ bạn hiểu lầm. Isp của tôi đang chặn tất cả lưu lượng truy cập thông qua cổng 53. Ngay cả khi tôi muốn sử dụng máy chủ google dns, tôi không thể truy cập chúng.
Rucent88

Câu trả lời:


12

Thực hiện tất cả các hướng dẫn này dưới dạng root (sudo).

Chỉnh sửa tập tin này.

/etc/NetworkManager/NetworkManager.conf

Vô hiệu hóa DnsMasq bằng cách bình luận ra dòng dns=dnsmasq. Đặt một #ở phía trước của dòng

#dns=dnsmasq

Khởi động lại mạng của bạn.

service network-manager restart

Thêm các quy tắc iptable này.

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
Giải pháp này cập nhật với HĐH và tiêu tốn tài nguyên bằng 0 và không có rủi ro bảo mật, thiết lập siêu dễ dàng với tập lệnh khởi động và bảo trì bằng không. Nhược điểm là nó không linh hoạt
Rucent88

3

Có vẻ như những gì bạn thực sự theo đuổi là kiểm soát những gì xảy ra với các truy vấn DNS của bạn.

Tôi không chắc chắn sử dụng iptables sẽ là giải pháp ưa thích của tôi.

Bạn đã nghĩ đến việc thiết lập một máy chủ DNS cục bộ chỉ đơn giản là chuyển tiếp yêu cầu của bạn đến máy chủ và cổng bạn muốn chưa? Một ví dụ: sử dụng tùy chọn giao tiếp bind9, bạn có thể thêm một cổng vào giao nhận.

Việc thiết lập như vậy dễ dàng hơn nhiều để bảo trì và khắc phục sự cố, và có thể linh hoạt hơn nhiều. Xem xét lợi thế của bộ đệm, hoặc chỉ xem xét trường hợp máy chủ DNS bên ngoài của bạn không hoạt động. Bạn có thể có nhiều bộ chuyển tiếp trong cấu hình DNS của mình, nhưng chỉ có một IP trong quy tắc iptables ....

Có một tổng quan tốt về việc thiết lập bind9 trong một hướng dẫn tại đại dương kỹ thuật số . Chỉ cần thêm cổng vào giao nhận và bạn sẽ được thiết lập tất cả.

Bind9 hoàn toàn không tiêu tốn nhiều tài nguyên và được cấu hình dễ dàng (hoặc ít nhất: dễ dàng hơn iptables :-))


Ồ, và không cần phải nói, trong thiết lập đó, đừng quên đặt (các) thiết bị của bạn để sử dụng máy chủ DNS chuyển tiếp cục bộ của bạn.
Vincent De Baere

Tôi đã có một máy chủ DNS đang chạy, nhưng nó không đáng tin cậy (phần cứng rác). Giữ cho nó bảo mật được cập nhật là một nỗi đau. Nó tiêu tốn nhiều thời gian, tài nguyên, điện, và cuối cùng nó đã đá cái xô. Nếu tôi có hàng trăm máy tính đằng sau một mạng công ty, thì tôi đồng ý rằng máy chủ DNS sẽ là một ý tưởng tốt. Nhưng tôi chỉ là một người với máy tính xách tay. Một vài quy tắc iptable nên là tài nguyên dễ nhất và thấp nhất.
Rucent88

Chỉ cần thêm một cái vào máy tính xách tay của bạn, nó sẽ tiêu tốn gần như không có tài nguyên và nó sẽ được cập nhật với hệ điều hành chính của bạn (giả sử bạn sử dụng các gói phân phối) và làm cho nó nghe trên localhost. Rủi ro bảo mật gần như bằng không.
Vincent De Baere

Thật vậy, IMHO, đó là cách tốt hơn để duy trì kịch bản trong 99% các trường hợp. 1% duy nhất không áp dụng, là khi bạn định cấu hình hệ thống Captive Portal, nhưng đó là một câu chuyện khác.
ivanleoncz

2

Thử đi:

Trước tiên, bạn phải kích hoạt tùy chọn chuyển tiếp trong

/etc/sysctl.conf

Đặt thành một giá trị của

net.ipv4.ip_forward = 1

Cho phép thay đổi

sysctl -p 

Lưu và chạy như sau:

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

Nếu bạn có thể chỉ định giao diện trong (-i eth1) trong PREROUTING hoặc / và out-interox (-o eth0) IN POSTROUTING có thể hữu ích.

LƯU Ý: Dòng MASQUARADE là cần thiết trong khi điều này che dấu IP đích với IP chính.


Tôi đưa vào sysctl net.ipv4.ip_forward=1và các quy tắc iptables. DNS đang hoạt động, nhưng nó vẫn bị chặn bởi isp của tôi. Vì vậy, điều đó cho tôi biết rằng DNS vẫn đang được gửi qua cổng 53.
Rucent88

Tôi đã thay đổi quy tắc của bạn thành udp, nhưng tôi đã nhận được kết quả tương tự.
Rucent88

Bạn có thể vui lòng đặt đầu ra của iptables-save không? Những gì tôi có thể là mặt nạ của bạn chỉ có MasQUERADE được chỉ định tất cả - 10.0.3.0/24, vì vậy, nếu bạn có thể vô hiệu hóa dòng đó và để lại một -MỘT ĐIỂM -j MASQUERADE, có thể hữu ích
tachomi

Tôi đã thêm thông tin bạn yêu cầu
Rucent88

Ok, chúng ta hãy hiểu một chút nhịp điệu .... Tất cả lưu lượng truy cập cổng 53 THU NHẬP là lưu lượng truy cập bạn muốn chuyển hướng đến 23.226.230.72 hoặc NGOÀI RA?
tachomi

1

Thử đi:

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

Điều đó có nghĩa là:
1) Bất kỳ người dùng địa phương nào liên hệ với thế giới tới cổng tcp 53 gửi đến 23.226.230.72 tại cổng 5353.
2) Tương tự như 1 nhưng đối với udp
3) Đặt thông tin nguồn trên gói gửi đi từ chúng tôi.


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

Thực tế là câu trả lời này không đề cập đến 5353 535 khiến tôi tin rằng nó tự động sai.
G-Man nói 'Phục hồi Monica'

đã sửa .........
Zibri

OK, tôi đang xem xét câu trả lời của bạn. Nó dường như rất giống với câu trả lời của tachomi ngoại trừ (1) bạn đã đổi sportthành  dport(đây rõ ràng là một lỗi trong câu trả lời của tachomibattman622 đã chỉ ra ba năm trước , (2) bạn đã thêm một dòng (lệnh) cho udp(đây là một cải tiến hợp pháp cho câu trả lời của tachomi, nhưng một câu trả lời đã được đề cập trong một bình luận  (Cont'd)
G-Man nói 'Tái lập lại Monica'

(Tiếp theo) và một số câu trả lời khác) và (3) bạn đã thay thế --to-destinationbằng  --to.  Trang người đàn ông không nói điều đó --tovà  --to-destinationtương đương; ngược lại, nó nói rằng --tođược sử dụng với NETMAPmục tiêu (trái ngược với  DNATmục tiêu) và đối số của nó không bao gồm số cổng. (Mặc dù tôi nhận thấy rằng một vài câu trả lời khác sử dụng --totheo cách bạn đã làm.) Bạn có chắc chắn rằng nó --tohoạt động theo cách bạn sử dụng (với số cổng, với  DNATmục tiêu)? Tiết (Cont'd)
G-Man nói 'Tái lập lại Monica'

(Tiếp theo), (Nếu vậy, có lẽ ai đó nên gửi yêu cầu thay đổi cho (các) người duy trì trang người đàn ông.) Có  --totốt hơn   --to-destinationbất kỳ cách nào khác ngoài sự ngắn gọn không?
G-Man nói 'Phục hồi Monica'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.