DNS araması IP ve Bağlantı Noktasını yeniden yönlendirmek için iptables


21

ISS'imin (verizon) 53 numaralı bağlantı noktasındaki tüm DNS trafiğini engellediğini öğrendim.

IPtables kullanarak, tüm DNS arama trafiğini belirli bir IP ve Bağlantı Noktasına (5353) yönlendirmek istiyorum. Bilgisayarımın 53 numaralı bağlantı noktasındaki başka bir bilgisayara bağlanma denemesi, 23.226.230.72:5353’e yönlendirilmelidir.

Kullanmaya çalıştığım DNS sunucusunu ve bağlantı noktasını doğrulamak için bu komutu çalıştırdım.

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

Bu kullanmaya çalıştığım iptables kuralı.

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

Bu kuralı ekledikten sonra, tüm DNS aramaları bulunamadı. Web sitesi ping dönüşü unknown host. Web sayfaları 'Sunucu Bulunamadı' diyor.

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

DNS’imin 23.226.230.72:5353’ten aranmasını istiyorum. İptables kuralının çalışmasını nasıl sağlayabilirim?

DÜZENLE

İnternet servis sağlayıcım tarafından DNS (port 53) müdahalesinin gösteri Çıktıyı kazıktan 23.226.230.72'ye 5353 numaralı bağlantı noktasından ve ardından 53 numaralı bağlantı noktasından izleyin.

~$ 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

Benim mevcut 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

Yani tüm 53 numaralı trafiği bu IP’ye (23.226.230.72) ve Liman’a (5353) yönlendirmeye mi çalışıyorsunuz?
tachomi

Lütfen iptables rulesburaya gönder
Networker

@tachomi Doğru
Rucent88

Veya ISS'nizin DNS’sini kullanamazsınız ... Google’ın genel DNS sunucuları 8.8.8.8ve8.8.4.4
Creek

@ Creek Sanırım yanlış anladın. ISP'm bütün trafiği bağlantı noktası 53 üzerinden durduruyor. Google dns sunucularını kullanmak istesem bile, bunlara erişemiyorum.
Rucent88

Yanıtlar:


12

Bu talimatların hepsini kök (sudo) olarak uygulayın.

Bu dosyayı düzenleyin.

/etc/NetworkManager/NetworkManager.conf

Satırı yorumlayarak DnsMasq'ı devre dışı bırakın dns=dnsmasq. #Çizginin önüne bir koy

#dns=dnsmasq

Ağınızı yeniden başlatın.

service network-manager restart

Bu iptable kuralları ekleyin.

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
Bu çözüm işletim sistemi ile güncellenir ve sıfır kaynak tüketir ve sıfır güvenlik riski, önyükleme komut dosyasıyla süper kolay kurulum ve sıfır bakımdır. Dezavantajı çok esnek değil
Rucent88

3

Asıl peşinde olduğunuz şey, DNS sorgularınızla olanları kontrol altına almak gibi görünüyor.

İptables kullanmak benim tercih ettiğim çözüm olurdu.

İsteklerinizi basitçe istediğiniz ana bilgisayara ve bağlantı noktasına yönlendiren bir yerel DNS sunucusu kurmayı düşündünüz mü? Bir örnek: bind9 ileticileri seçeneğini kullanarak bir ileticiye bağlantı noktası ekleyebilirsiniz.

Böyle bir kurulumun yapılması ve giderilmesi daha kolaydır ve çok daha esnek olabilir. Önbelleklemenin avantajını düşünün veya yalnızca harici DNS sunucunuzun kapalı olduğu durumu göz önünde bulundurun. DNS yapılandırmanızda birden fazla iletici olabilir, ancak iptables kurallarında yalnızca bir IP olabilir ....

Bind9 kurulumunun dijital okyanustaki bir derste iyi bir gözden geçirme var . Bağlantı noktasını ileticilere eklemeniz yeterlidir;

Bind9 hiç fazla kaynak tüketmiyor ve kolayca yapılandırılıyor (veya en azından: iptables'dan daha kolay :-))


Ooh ve söylemeye gerek yok, bu kurulumda, cihazlarınızı yerel, yönlendirme DNS sunucunuzu kullanacak şekilde ayarlamayı unutmayın.
Vincent De Baere,

Çalışan bir DNS sunucum var, ancak güvenilir değildi (önemsiz donanım). Güvenliği güncel tutmak bir acıydı. Daha fazla zaman, kaynak, elektrik harcadı ve nihayet kovayı attı. Bir şirket ağının arkasında yüzlerce bilgisayarım olsaydı, DNS sunucusunun iyi bir fikir olacağını kabul ediyorum. Ama ben sadece dizüstü bilgisayarı olan bir kişiyim. Birkaç iptable kural, en kolay ve en düşük kaynak olmalıdır.
Rucent88

Dizüstü bilgisayarınıza bir tane ekleyin, neredeyse hiç kaynak tüketmez ve ana işletim sisteminizle (dağıtım paketlerini kullandığınız varsayılarak) güncellenir ve localhost'ta dinletilir. Neredeyse sıfır güvenlik riski.
Vincent De Baere

Aslında, IMHO, senaryoyu vakaların% 99'unda tutmanın daha iyi bir yolu. Uygulanmayan% 1 yalnızca, bir Captive Portal sistemini yapılandırırken, ancak bu başka bir hikaye.
ivanleoncz

2

Bunu dene:

Öncelikle içindeki yönlendirme seçeneğini etkinleştirmeniz gerekir.

/etc/sysctl.conf

Değerine bir olarak ayarla

net.ipv4.ip_forward = 1

Değişiklikleri etkinleştir

sysctl -p 

Aşağıdakileri kaydedin ve çalıştırın:

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

PREROUTING içindeki-arayüzü (-i eth1) veya POSTROUTING IN / / veya out-interfect (-o eth0) 'ı belirtebilirseniz yararlı olabilir.

NOT: MASQUARADE hattı, bu IP hedef IP adresini ana IP ile maskelemek için gereklidir.


Ben sysctl net.ipv4.ip_forward=1ve iptables kurallarını koydum . DNS çalışıyor, ancak hala isp'im tarafından ele geçiriliyor. Bu da bana DNS’in hala 53
numaralı

Kuralını değiştirdim udpama aynı sonuçları aldım.
Rucent88

Lütfen iptables-save çıktısını koyabilir misiniz? Masrafınızın sadece belirtilen MASQUERADE all - 10.0.3.0/24 maskelemesi olabilir, bu yüzden bu satırı devre dışı bırakıp -A POSTROUTING -j MASQUERADE one'ı bırakabilirseniz, yardımcı olabilir
tachomi

İstediğiniz bilgileri ekledim
Rucent88

Tamam, haydi küçük bir ritmi anlayalım .... Tüm liman 53 INCOMING trafiği, 23.226.230.72'ye mi yoksa OUTGOING'a mı yönlendirmek istediğinizi?
tachomi

1

Bunu dene:

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

Bunun anlamı:
1) tcp 53 limanına dünya ile temasa geçen herhangi bir yerel kullanıcı, 5353 portunda 23.226.230.72'ye gönderir.
2) 1 ile aynı ama udp için
3) Giden paketteki kaynak bilgisini bizden geldiği şekilde ayarlayın.


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

Bu cevabın “5353” ten söz etmemesi, otomatik olarak yanlış olduğuna inanmamı sağlıyor.
G-Man

düzeltildi .........
Zibri

Tamam, cevabına ikinci kez bakıyorum. Tachomi'nin cevabına çok benziyor gibi görünüyor (1), değiştirmiş sportolduğunuz  dport(bu, görünüşe göre, tachomi'nin cevabındaki battman622'nin üç yıl önce belirttiği cevabındaki bir hataydı , (2), udp(bu) tachomi'nin cevabına yönelik meşru bir gelişme, ancak bir yorumda daha önce de belirtildiği gibi  ... (Devamı)
G-Man 'Monica'yı Yeniden Girin' Diyor

(Devamı)… ve diğer birkaç cevap) ve (3) --to-destinationile yer  değiştirdiniz --to.  Man sayfası bunu söylemez --tove  --to-destinationeşdeğerdir; tam tersine, bu söylüyor --tokullanılır NETMAPhedefe (karşıt olarak  DNAThedefe) ve onun argümanı bir port numarası içermez. (Birkaç yanıtın --tosizin yaptığınız gibi kullanıldığını fark etsem de.) Kullandığınız --toşekilde çalıştığından emin misiniz (bir port numarasıyla,  DNAThedefle birlikte)? … (Devam ediyor)
G-Man

(Devam ediyor)… (Öyleyse, belki birileri man sayfalarının bakıcılarına bir değişiklik isteği göndermelidir.)  Kısalık dışında herhangi bir şekilde --todaha iyi   --to-destinationmidir?
G-Man
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.