Iptables untuk mengarahkan IP lookup DNS dan Port

21

Saya telah menemukan bahwa ISP saya (verizon) mencegat semua lalu lintas DNS pada port 53.

Menggunakan iptables, saya ingin mengarahkan semua lalu lintas pencarian DNS ke IP dan Port tertentu (5353). Segala upaya komputer saya untuk terhubung ke komputer lain pada port 53 harus diarahkan ke 23.226.230.72-5353.

Untuk memverifikasi server dan port DNS yang saya coba gunakan, saya telah menjalankan perintah ini.

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

Ini adalah aturan iptables yang saya coba gunakan.

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

Setelah menambahkan aturan itu, semua pencarian DNS tidak ditemukan. Ping situs web kembali unknown host. Halaman web mengatakan 'Server Tidak Ditemukan'.

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

Saya ingin pencarian DNS saya ditarik dari 23.226.230.72-5353. Bagaimana saya bisa membuat aturan iptables berfungsi?

EDIT

Peragaan intersepsi DNS (port 53) oleh ISP saya. Lacak output dari penggalian ke 23.226.230.72 melalui port 5353, dan kemudian port 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 saya saat ini. 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
Rucent88
sumber
Jadi Anda mencoba mengalihkan semua lalu lintas port 53 ke IP itu (23.226.230.72) dan Port (5353)?
tachomi
tolong posting Anda iptables rules sini
Networker
@tomiomi Benar
Rucent88
Atau Anda tidak dapat menggunakan DNS ISP Anda ... Server DNS publik Google adalah 8.8.8.8dan8.8.4.4
Creek
@Creek, saya pikir Anda salah paham. ISP saya mencegat semua lalu lintas melalui port 53. Bahkan jika saya ingin menggunakan server google dns, saya tidak dapat mengaksesnya.
Rucent88

Jawaban:

12

Lakukan semua instruksi ini sebagai root (sudo).

Edit file ini.

/etc/NetworkManager/NetworkManager.conf

Nonaktifkan DnsMasq dengan berkomentar di luar baris dns=dnsmasq. Letakkan a #di depan garis

#dns=dnsmasq

Mulai ulang jaringan Anda.

service network-manager restart

Tambahkan aturan iptable ini.

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
Rucent88
sumber
2
Solusi ini diperbarui dengan OS, dan menggunakan sumber daya nol, dan risiko keamanan nol, pengaturan super mudah dengan skrip boot, dan nol pemeliharaan. Kelemahannya adalah tidak terlalu fleksibel
Rucent88
3

Tampaknya apa yang benar-benar Anda cari adalah untuk mengendalikan apa yang terjadi dengan permintaan DNS Anda.

Saya tidak yakin menggunakan iptables akan menjadi solusi pilihan saya.

Pernahkah Anda berpikir untuk menyiapkan server DNS lokal yang hanya meneruskan permintaan Anda ke host dan port yang Anda inginkan? Salah satu contoh: menggunakan opsi bind9 forwarders Anda dapat menambahkan port ke forwarder.

Pengaturan seperti itu jauh lebih mudah untuk dipelihara dan dipecahkan, dan mungkin jauh lebih fleksibel. Pertimbangkan keuntungan dari cacheing, atau pertimbangkan saja kasus di mana server DNS eksternal Anda sedang down. Anda dapat memiliki banyak penerusan dalam konfigurasi DNS Anda, tetapi hanya satu IP dalam aturan iptables ....

Ada gambaran bagus tentang pengaturan bind9 dalam tutorial di laut digital . Cukup tambahkan port ke forwarder dan Anda harus siap.

Bind9 tidak mengkonsumsi banyak sumber daya sama sekali dan mudah dikonfigurasikan (atau setidaknya: lebih mudah dari iptables :-))

Vincent De Baere
sumber
Ooh, dan tentu saja, dalam pengaturan itu, jangan lupa untuk mengatur perangkat Anda untuk menggunakan server DNS penerusan lokal Anda.
Vincent De Baere
Saya memang memiliki server DNS yang berjalan, tetapi itu tidak dapat diandalkan (perangkat keras sampah). Menjaga keamanannya diperbarui adalah hal yang merepotkan. Itu menghabiskan lebih banyak waktu, sumber daya, listrik, dan akhirnya menendang ember. Jika saya memiliki ratusan komputer di belakang jaringan perusahaan, maka saya setuju bahwa server DNS akan menjadi ide yang bagus. Tapi saya hanya satu orang dengan laptop. Beberapa aturan iptable harus menjadi sumber daya termudah dan terendah.
Rucent88
Cukup tambahkan satu di laptop Anda, ia hampir tidak menggunakan sumber daya dan akan diperbarui dengan os utama Anda (dengan asumsi Anda menggunakan paket distribusi), dan membuatnya mendengarkan di localhost. Hampir tidak ada risiko keamanan.
Vincent De Baere
Memang, IMHO, itu cara yang lebih baik untuk mempertahankan skenario di 99% dari kasus. Satu-satunya 1% yang tidak berlaku, adalah ketika Anda mengkonfigurasi sistem Captive Portal, tapi itu cerita lain.
ivanleoncz
2

Coba ini:

Pertama, Anda harus mengaktifkan opsi penerusan masuk

/etc/sysctl.conf

Setel ke satu nilai

net.ipv4.ip_forward = 1

Aktifkan perubahan

sysctl -p 

Simpan dan jalankan yang berikut:

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

Jika Anda bisa menentukan in-interface (-i eth1) di PREROUTING atau / dan out-interfect (-o eth0) DALAM POSTROUTING bisa berguna.

CATATAN: Garis MASQUARADE diperlukan saat ini menutupi IP tujuan dengan IP utama.

Takomi
sumber
Saya memasukkan sysctl net.ipv4.ip_forward=1dan aturan iptables. DNS berfungsi, tetapi masih dicegat oleh ISP saya. Jadi itu menunjukkan kepada saya bahwa DNS masih dikirim melalui port 53.
Rucent88
Saya mengubah aturan Anda menjadi udp, tetapi saya mendapatkan hasil yang sama.
Rucent88
Bisakah Anda menaruh output dari iptables-save? Apa yang saya mungkin adalah bahwa masking Anda hanya MASQUERADE yang ditentukan semua - 10.0.3.0/24, jadi Jika Anda dapat menonaktifkan garis itu dan meninggalkan -A POSTROUTING -j MASQUERADE satu, bisa membantu
tachomi
Saya menambahkan informasi yang Anda minta
Rucent88
Ok, mari kita mengerti sedikit ketukan .... Semua port 53 lalu lintas INCOMING adalah yang Anda ingin arahkan ke 23.226.230.72 atau yang keluar?
tachomi
1

Coba ini:

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

Ini berarti:
1) Setiap pengguna lokal yang menghubungi dunia ke port tcp 53 kirim ke 23.226.230.72 di port 5353.
2) Sama seperti 1 tetapi untuk udp
3) Tetapkan informasi sumber pada paket keluar yang berasal dari kami.

George Hidalgo
sumber
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
Zibri
sumber
Fakta bahwa jawaban ini tidak menyebutkan "5353" membuat saya percaya bahwa itu secara otomatis salah.
G-Man Mengatakan 'Reinstate Monica'
dikoreksi .........
Zibri
OK, saya perhatikan jawaban Anda. Tampaknya sangat mirip dengan jawaban tachomi kecuali (1) Anda telah berubah sportmenjadi  dport(ini, tampaknya, kesalahan dalam jawaban tachomi yang ditunjukkan oleh battman622 tiga tahun lalu , (2) Anda menambahkan baris (perintah) untuk udp(ini adalah perbaikan sah untuk jawaban tachomi, tapi yang sudah disebutkan dalam komentar  ... (Lanjutan)
G-Man Mengatakan 'Reinstate Monica'
(Lanjutkan) ... dan beberapa jawaban lainnya), dan (3) Anda diganti --to-destinationdengan  --to.  Halaman manual tidak mengatakan itu --todan  --to-destinationsetara; sebaliknya, ia mengatakan bahwa --todigunakan dengan NETMAPtarget (sebagai lawan dari  DNATtarget) dan bahwa argumennya tidak termasuk nomor port. (Meskipun saya perhatikan bahwa beberapa jawaban lain menggunakan --tocara Anda melakukannya.) Apakah Anda yakin itu --toberfungsi seperti Anda menggunakannya (dengan nomor port, dengan  DNATtarget)? … (Lanjutan)
G-Man Mengatakan 'Reinstate Monica'
(Lanjutkan) ... (Jika demikian, mungkin seseorang harus mengajukan permintaan perubahan kepada pengelola halaman manual). Apakah  --tolebih baik daripada   --to-destinationdengan cara lain selain singkatnya?
G-Man Mengatakan 'Reinstate Monica'