-1

У меня есть сервер Debian со статическим IP-адресом. Я хочу настроить его так, чтобы при подключении к этому серверу через определенный порт он перенаправлял этот трафик в мою домашнюю сеть.

У меня это работает с использованием iptables, например, так:

iptables -t nat -A PREROUTING -p tcp --dport [port] -j DNAT --to [home-ip]:[port]
iptables -t nat -A POSTROUTING -d [home-ip] -j MASQUERADE

Проблема в том, что моя домашняя сеть имеет динамический IP. Как только это изменится (что происходит достаточно часто), это перестанет работать.

Однако для моего домашнего IP-адреса настроено динамическое DNS-имя.

Можно ли в любом случае использовать iptables, чтобы он всегда перенаправлял этот трафик на IP-адрес, к которому относится мое динамическое DNS-имя?

2 ответа2

1

IPTables не поддерживает оперативное разрешение DNS, поскольку оно связано с проблемами безопасности, производительности и реализации.

Если кто-то сможет изменить записи DNS для вашего домена, это повлияет на правила IPTables.

Если бы IPTables выполнял поиск DNS для каждого входящего пакета или даже пакета инициализации соединения, это было бы очень медленно.

Кроме того, если существует несколько записей A для доменного имени, какую из них будет использовать IPTables?

Чтобы выполнить то, что вы ищете, вам необходимо внедрить систему, в которой хост, на котором выполняются IPTables, будет периодически проверять IP-адрес вашего динамического имени хоста, а затем соответствующим образом изменять его правила.

Другой альтернативой может быть наличие программного обеспечения на вашем компьютере в домашней сети, которое отслеживает текущий общедоступный IP-адрес, а затем отправляет его на ваш сервер IPTables, который перенастраивает IPTables.

Я не знаю ни одного конкретного программного обеспечения, которое могло бы сделать это для вас.

1

По причинам, хорошо объясненным Теро Киканеном, iptables - не инструмент для выполнения того, что вы хотите. Вы должны использовать вместо ssh .

Давай позвоним:

  1. hostA ваш локальный компьютер;

  2. hostB ваш сервер Debian;

  3. hostC ваш домашний компьютер.

Например, если вы хотите переслать ваш ssh- сеанс, вам нужно добавить на ПК hostA следующую строку в ваш файл .ssh/config:

Host hostC
ProxyCommand ssh hostB -W %h:%p

и убедитесь, что у вас есть учетные данные для входа в hostC на hostA. Теперь из hostA вы можете подключиться к hostC следующим образом:

ssh me@hostc

В этом вам не нужно использовать IP-адреса, неразрешенные имена в порядке. Кроме того, вы можете добавить всевозможные параметры (такие как порт, файл криптографического ключа, пользователь и т.д.) Либо в файл команд прокси, либо в интерфейс командной строки (это зависит от того, используется ли параметр для соединения B-> C, или для подключения A-> B соответственно).

Таким же образом вы можете переадресовать данный порт (portA) на hostA на другой порт (portC) на hostC через посредство hostB следующим образом:

ssh -L portA:hostC:portC me@hostB

Еще раз, не нужно использовать IP-адреса, подойдут простые имена. Еще одним важным преимуществом ssh является то, что все коммуникации автоматически шифруются, поэтому никто не сможет увидеть, что вы делаете.

Наконец, если вы не знаете, как дать (бесплатно!) имя ПК без статического IP-адреса (hostC), просто проверьте noip, это тривиально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .