Iptables NAT: реализация сетевой ретрансляции
Iptables NAT: реализация сетевой ретрансляции

Iptables NAT: реализация сетевой ретрансляции

В этой статье мы подробно рассмотрим возможности iptables NAT (преобразование сетевых адресов) и способы его использования для сетевой ретрансляции. Мы подробно объясним значение цепочек PREROUTING, POSTROUTING и OUTPUT, используемых в NAT, покажем, как настроить DNAT (преобразование адресов сети назначения) и SNAT (преобразование адресов исходной сети), а также продемонстрируем эти концепции в сценарии интрасети. Наконец, мы объясним, как сохранить конфигурацию iptables, чтобы она вступила в силу после перезапуска.

1. Iptables и NAT

iptables — один из наиболее часто используемых инструментов брандмауэра в системах Linux. Он управляет и обрабатывает пакеты через четыре разные таблицы и использует пять цепочек для обработки и пересылки пакетов:

Фильтрповерхность(фильтр)

  • Цепочка INPUT: контролирует, принимаются или отклоняются пакеты данных, поступающие в машину.
  • Цепочка FORWARD: контролирует, принимаются или отклоняются пакеты, пересылаемые через этот компьютер.
  • Цепочка OUTPUT: контролирует, принимаются или отклоняются пакеты данных, отправленные с этого компьютера.

Таблица NAT (нат)

  • Цепочка PREROUTING: используется для изменения IP-адреса назначения (DNAT) или других характеристик до того, как пакет данных попадет в машину.
  • Цепочка POSTROUTING: используется для изменения исходного IP-адреса (SNAT) или других характеристик перед тем, как пакет покинет машину.

Отсутствует поверхность (отсутствует)

  • Цепочка PREROUTING: используется для изменения характеристик пакета данных до того, как пакет данных попадет в машину.
  • Цепочка INPUT: используется для изменения характеристик пакета данных после его поступления в машину.
  • Цепочка FORWARD: используется для изменения характеристик пакета данных при его пересылке через машину.
  • Цепочка OUTPUT: используется для изменения характеристик пакета данных перед его отправкой с машины.
  • Цепочка POSTROUTING: характеристики, используемые для изменения пакетов перед тем, как они покинут хост.

Сыройповерхность (сырой)

  • Цепочка PREROUTING: используется для необработанной обработки пакетов перед вводом в другие таблицы, обычно используется для установки правил отслеживания соединений.

NAT — это основная функция в iptables, в основном включающая преобразование адресов источника (SNAT) и преобразование адресов назначения (DNAT). В функции NAT iptables в основном задействованы три цепочки:

  • ПРЕДВАРИТЕЛЬНАЯ ЦЕПЬ
  • ПОСТРАУТИНГовая цепочка.
  • Цепочка ВПЕРЕД.

2. Настройте ДНКАТ

Предположим, мы хотим перенаправить весь TCP-трафик, идущий на порт 80 этого компьютера (публичный IP-адрес), на порт 80 другого сервера с общедоступным IP-адресом (8.209.1.81). Этого требования можно добиться, настроив DNAT:

Язык кода:javascript
копировать
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 8.209.1.81:80

3. Настройте SNAT

Трансляция сетевых адресов (NAT) преобразует частные IP-адреса в частной сети в общедоступные IP-адреса для подключения к Интернету. Во время этого процесса NAT изменит IP-адрес источника или IP-адрес назначения пакета данных. При обработке исходящего трафика используйте преобразование адресов исходной сети (SNAT).

При работе со средой интрасети нам необходим SNAT для использования IP-адреса интрасети, поскольку он позволяет компьютерам в интрасети получать доступ к Интернету через общий общедоступный IP-адрес. Если мы используем общедоступный IP-адрес в качестве адреса SNAT, то пользователи интрасети не смогут получить доступ к услугам, предоставляемым SNAT, поскольку они не могут напрямую получить доступ к общедоступному IP-адресу. Таким образом, использование IP-адреса интрасети для SNAT является ключом к реализации передачи внутри сети.

Например, мы можем использовать следующую команду для реализации SNAT:

Язык кода:javascript
копировать
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.1

В этой команде:

  • -t natЭто означает, что мы хотим действоватьNATповерхность。
  • -A POSTROUTINGДа, чтобыPOSTROUTINGДобавить новое правило в цепочку。
  • -o eth0Да, это правило указано только для экспорта, посколькуeth0Пакет работает.。
  • -j SNATОн указывает, что действие, которое мы хотим выполнить, — это преобразование адреса источника.(SNAT)。
  • --to-source 192.168.1.1это указать новый источникIPадрес。

4. Включите переадресацию IP-адресов Linux.

Чтобы iptables правильно выполнял переадресацию NAT,нам нужно включитьLinuxизIP-переадресация Функция。Это можно изменить с помощью/etc/sysctl.confдокумент,И добавьте следующие строки для достижения:

Язык кода:javascript
копировать
net.ipv4.ip_forward = 1

Затем,бегатьsysctl -pкоманда, чтобы изменения вступили в силу。

5. Сохранение конфигурации iptables

Чтобы гарантировать, что правила iptables по-прежнему вступят в силу после перезапуска.,Нам нужно сохранить правила。Это можно сделать с помощьюiptables-saveиiptables-restoreкоманда сохранения правили Реализация реставрации。

6. Просмотр правил iptables

мы можем использоватьiptables -t nat -L -n -vПредставление командnatповерхностьизправило。-Lповерхность Показать правила,-nповерхность Отображается в цифровом видеадресипорт,-vповерхность Показать подробный вывод。

Язык кода:javascript
копировать
sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8005 to:8.209.1.81:80

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 SNAT       tcp  --  *      *       0.0.0.0/0            8.209.1.81           tcp dpt:8005 to:192.168.1.1

Подвести итог

Выше приведено подробное объяснение всего процесса реализации сетевой передачи с использованием iptables NAT. На реальных примерах сценариев внутренней сети мы объяснили, как настроить DNAT и SNAT и как сделать конфигурацию постоянной. Надеюсь, это руководство поможет вам лучше понять, как работают iptables и NAT. Если у вас есть вопросы, смело задавайте их в комментариях.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose