Как перенаправить один IP-запрос на другой порт

Вопрос или проблема

Из-за некоторых проблем в моей стране (Иран) у меня возникли трудности с подключением к API, подобному этому:

https://api.another.website.com

Я знаю указанный выше URL, но он находится в закодированном PHP-файле с IonCube Loader, поэтому я не могу изменить URL.

Я собираюсь сделать следующее:

Если я выполню curl https://api.another.website.com, это должно измениться на curl https://api.another.website.com:9999

Что я сделал:

  1. Отредактировал /etc/hosts и добавил эту запись: 1.1.1.1 api.another.website.com (в этом случае 1.1.1.1 — это IP моего сервера)
  2. Выполнил эту SSH-команду для открытия локальной переадресации: ssh -L 0.0.0.0:9999:api.another.website.com:443 root@remote_server

Другое, что я не знаю, это что делать в iptables.

Я гуглил и понял, что мне нужно добавить что-то вроде этого в iptables:

iptables -I OUTPUT -o lo -t nat -p tcp --dport 443 -j DNAT --to 1.1.1.1:9999

Но проблема, которую я вижу в коде выше (и что я понял), в том, что он перенаправляет все запросы на 443 на 9999, но я не знаю, как перенаправить порт 443 только для одного IP или одного домена.

Не могли бы вы помочь мне, как это сделать?

Используйте -d, чтобы сопоставить IP-адрес назначения. В этом случае 1.1.1.1 — это оригинальный адрес назначения (как разрешено через /etc/hosts), поэтому используйте -d 1.1.1.1.

Ответ или решение

Для того чтобы перенаправить запросы к определённому IP на другой порт, вы можете воспользоваться iptables для настройки NAT (сети с преобразованием адресов). В вашем случае, вы хотите перенаправить запросы к api.another.website.com, которые по умолчанию поступают на порт 443, на порт 9999 вашего сервера. Ниже приведены указания по выполнению этой задачи.

Шаги по перенаправлению:

  1. Редактирование файла hosts:
    Вы уже добавили запись в файл /etc/hosts:

    echo "1.1.1.1 api.another.website.com" | sudo tee -a /etc/hosts
  2. Настройка SSH-туннеля:
    Вы правильно открываете SSH-туннель с параметрами:

    ssh -L 0.0.0.0:9999:api.another.website.com:443 root@remote_server

    Это перенаправит локальные запросы на порт 9999 к api.another.website.com на порту 443 через remote_server.

  3. Настройка iptables:
    Теперь вам нужно настроить iptables, чтобы перенаправить трафик только для определённого IP-адреса. Используйте следующую команду:

    sudo iptables -t nat -A OUTPUT -d api.another.website.com -p tcp --dport 443 -j DNAT --to-destination 1.1.1.1:9999

    Объяснение команды:

    • -t nat: Указывает, что мы работаем с таблицей NAT.
    • -A OUTPUT: Добавляет правило к цепочке OUTPUT (исходящие пакеты).
    • -d api.another.website.com: Указывает, что правило будет применяться только к пакету, направленному на указанный домен.
    • -p tcp: Применяем правило только для TCP-протокола.
    • --dport 443: Указывает, что правила будут применяться только к запросам, направленным на порт 443.
    • -j DNAT --to-destination 1.1.1.1:9999: Задаёт новое направление, на которое будут перенаправляться пакеты (в вашем случае 1.1.1.1:9999).
  4. Проверка правил iptables:
    Убедитесь, что правило добавлено успешно, с помощью команды:

    sudo iptables -t nat -L -n -v
  5. Сохранение настроек iptables (по желанию):
    Если вы хотите, чтобы данное правило сохранялось после перезагрузки системы, используйте следующие команды:

    sudo iptables-save > /etc/iptables/rules.v4

Теперь, когда вы выполните curl https://api.another.website.com, запрос будет перенаправлен на https://1.1.1.1:9999, как вы и планировали.

Если у вас возникнут дальнейшие вопросы или проблемы, пожалуйста, дайте знать!

Оцените материал
Добавить комментарий

Капча загружается...