Iptables для перенаправлення IP-адреси пошуку та порту DNS


22

Я виявив, що мій провайдер (verizon) перехоплює весь DNS-трафік на порту 53.

За допомогою iptables я хочу перенаправити весь трафік пошуку DNS на певний IP та порт (5353). Будь-яку спробу мого комп’ютера підключити до іншого комп’ютера на порту 53 слід перенаправити на 23.226.230.72.135353.

Щоб перевірити сервер 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. На веб-сторінках написано "Сервер не знайдено".

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

Я хочу, щоб мій DNS для пошуку був витягнутий з 23.226.230.72:1353. Як змусити правило iptables працювати?

EDIT

Демонстрація перехоплення DNS (порт 53) моїм провайдером. Простежте вихід з копання до 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)?
tachomi

будь ласка, опублікуйте iptables rulesтут
Networker

@tachomi Правильно
Rucent88

Або ви не можете використовувати DNS свого провайдера ... Загальнодоступні сервери DNS Google є 8.8.8.8і8.8.4.4
Creek

@Creek Я думаю, ти неправильно розумієш. Мій isp перехоплює весь трафік через порт 53. Навіть якщо я хотів використовувати сервери google dns, я не можу отримати доступ до них.
Rucent88

Відповіді:


13

Виконайте всі ці вказівки як root (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 forwarders, ви можете додати порт до експедитора.

Таке налаштування набагато простіше в обслуговуванні та усуненні несправностей, а може бути і значно гнучкішим. Розгляньте перевагу кешування, або просто розгляньте випадок, коли ваш зовнішній DNS-сервер не працює. У вашій конфігурації DNS ви можете мати декілька пересилачів, але лише один IP в правилах iptables ....

Існує хороший огляд налаштування bind9 в навчальному посібнику в цифровому океані . Просто додайте порт експедиторам, і вам слід все налаштувати.

Bind9 взагалі не споживає багато ресурсів і легко конфігурується (або принаймні: простіше, ніж iptables :-))


О, і не потрібно говорити, що в цій програмі не забудьте встановити ваш пристрій (и) для використання вашого локального переадресуючого DNS-сервера.
Вінсент Де Баре

У мене був запущений DNS-сервер, але він не був надійним (непотрібне обладнання). Постійне оновлення безпеки було болем. Це витрачало більше часу, ресурсів, електроенергії, і воно, нарешті, вигнало відро. Якби у мене за корпоративною мережею були сотні комп’ютерів, я згоден, що DNS-сервер був би хорошою ідеєю. Але я просто одна людина з ноутбуком. Пара правил iptable повинна бути найпростішим і найнижчим ресурсом.
Rucent88

Просто додайте його на свій ноутбук, він споживає майже ніяких ресурсів, і він буде оновлюватися з вашою основною операційною системою (якщо припустити, що ви використовуєте дистрибутивні пакети), і змусити її слухати на localhost. Майже нульовий ризик безпеки.
Вінсент Де Баере

Дійсно, ІМХО, це кращий спосіб підтримувати сценарій у 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

Якщо ви можете вказати вбудований інтерфейс (-i eth1) у ПЕРЕВІРКУВАННІ або / та перешкоджати взаємодії (-o eth0) В ПОСТРОЙКІ може бути корисним.

ПРИМІТКА: Лінія 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 РОЗМІСТЮВАННЯ -j MASQUERADE один, може бути корисним
tachomi

Я додав запитувану інформацію
Rucent88

Гаразд, давайте розберемося з невеликим ритмом .... Весь порт 53 ІНТОМИНГОВИЙ трафік - це той, який ви хочете переспрямувати на 23.226.230.72, або ВІДМОВИЙ?
tachomi

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 , але для УДП
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 каже: "Відновіть Моніку"

виправлено .........
Зібрі

Гаразд, я по-другому дивлюсь на вашу відповідь. Це , здається, дуже схожий на відповідь tachomi в винятком (1) ви змінили sportдо  dport(це було, по- видимому, помилка у відповідь tachomi, що battman622 вказав три роки тому , (2) ви додали рядок (команда) для udp(це легітимне поліпшення відповіді тахомі, але таке, про яке вже згадувалося в коментарі  … (Продовжував)
G-Man каже «Відновити Моніку»

(Продовження) ... і ще кілька відповідей), і (3) ви замінили --to-destinationз  --to.  Сторінка man не говорить про це --toі  --to-destinationє рівнозначною; навпаки, він говорить, що --toвикористовується з NETMAPціллю (на відміну від  DNATцілі) і що її аргумент не включає номер порту. (Хоча я зауважую, що пара інших відповідей використовує --toте, що ви зробили.) Ви впевнені, що --toпрацює так, як ви його використовуєте (з номером порту, з  DNATціллю)? … (Продовжував)
G-Man каже: «Відновіть Моніку»

(Продовження) ... (Якщо це так, можливо , хто - то повинен подати запит на зміну до супроводжуючого (и) людини сторінок.) Є  чи --toкраще , ніж   --to-destinationв будь-якому випадку, крім стислості?
G-Man каже "Відновити Моніку"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.