Вопрос или проблема
Здравствуйте, я хотел бы получить совет по использованию VyOS для конкретного типа NAT.
У меня есть ситуация, когда я хочу выполнять NAT для соединения, соответствующего адресу назначения и порту назначения. Но я хотел бы перевести не только порт назначения, но и адрес источника. Мне нужен DNAT и соответствующий SNAT.
Будет несколько соединений, и идея заключается в том, что для каждого соединения будет использоваться разный адрес источника в зависимости от исходного назначения, и они будут перенаправлены на общее назначение.
Проблема в том, что DNAT выполняется первым, и поскольку он переводит адрес назначения, я не знаю, на что опираться в SNAT. Если бы я мог сделать так, чтобы SNAT выполнялся первым, это решило бы проблему. Или если бы я каким-либо образом смог “пометить” соединение с помощью DNAT и затем использовать эту метку в SNAT, это тоже сработало бы.
Вот пример двух соединений, где я придумал несуществующую функцию маркировки соединений, чтобы проиллюстрировать то, что я хочу сделать:
set nat destination rule 89 destination address 192.168.222.222
set nat destination rule 89 destination port 10106
set nat destination rule 89 translation port 10000
set nat destination rule 89 modify mark '89'
set nat source rule 89 connection mark '89'
set nat source rule 89 translation address 10.1.1.10
set nat destination rule 96 destination address 192.168.222.222
set nat destination rule 96 destination port 10186
set nat destination rule 96 translation port 10000
set nat destination rule 96 modify mark '96'
set nat source rule 96 connection mark '96'
set nat source rule 96 translation address 10.1.1.20
Обратите внимание, что оба соединения переводятся на одно и то же назначение, поэтому я не могу использовать это в правиле SNAT.
Есть ли способ выполнить SNAT перед DNAT или добиться желаемого другим способом в VyOS?
Другие моменты, на которые стоит обратить внимание:
- Все соединения поступают с одного и того же хоста, поэтому я не могу опираться на это
- Исходный порт является эпhemerальным, поэтому я не могу опираться на это
- Цель такой настройки — симулировать соединения от нескольких клиентов к общему назначению, когда на самом деле они приходят с одного хоста, используя разные порты назначения, чтобы различать каждого симулированного клиента.
Ответ или решение
Вопрос об использовании цепочек SNAT и DNAT в VyOS действительно интересен и требует внимательного подхода. Ваша задача заключается в том, чтобы создать настройки NAT, где одной операции DNAT сопутствует соответствующая операция SNAT. Это необходимо для того, чтобы правильно маршрутизировать трафик, основываясь на разных критериях.
Общий подход
В VyOS порядок обработки NAT — это ключевой момент. Обычно выполняется DNAT, после чего уже происходит SNAT. Но эта последовательность может быть неудобной в вашем случае, так как вы хотите применить SNAT в зависимости от оригинального назначения.
Решение
Ваша задача может быть решена с использованием mark-трассировки соединения с помощью iptables, что позволит вам применять SNAT после DNAT, основываясь на специфических метках.
Вот шаги для настройки данной схемы в VyOS:
- Создание правил DNAT:
- Создайте правила DNAT для ваших разных маршрутов, как вы уже делаете.
- Однако добавьте команды для маркировки трафика.
set nat destination rule 89 destination address 192.168.222.222
set nat destination rule 89 destination port 10106
set nat destination rule 89 translation address 10.0.0.10
set nat destination rule 89 translation port 10000
set nat destination rule 89 modify connection mark 'mark-89'
set nat destination rule 96 destination address 192.168.222.222
set nat destination rule 96 destination port 10186
set nat destination rule 96 translation address 10.0.0.10
set nat destination rule 96 translation port 10000
set nat destination rule 96 modify connection mark 'mark-96'
- Создание правил SNAT:
- Установите правила SNAT, но используйте метки соединений для дифференциации.
set nat source rule 89 outbound-interface 'eth0'
set nat source rule 89 source address '192.168.0.0/24' # ваш исходный адрес
set nat source rule 89 connection mark 'mark-89'
set nat source rule 89 translation address '10.1.1.10'
set nat source rule 96 outbound-interface 'eth0'
set nat source rule 96 source address '192.168.0.0/24' # ваш исходный адрес
set nat source rule 96 connection mark 'mark-96'
set nat source rule 96 translation address '10.1.1.20'
- Итоговая конфигурация:
- Попробуйте протестировать данную настройку, чтобы убедиться, что ваш трафик правильно маркируется и NAT выполняется согласно нужным правилам.
Примечания:
- Убедитесь, что ваше окружение соответствует требуемым конфигурациям (например, интерфейсы, IP адреса и пути).
- Возможно, потребуется отладка и мониторинг состояния соединений для проверки корректности работы всей схемы.
- Если связь по соединению не маркируется должным образом, возможно, вам стоит исследовать дополнительные возможности iptables или проверку состояния соединений.
Это решение должно помочь вам в настройке SNAT и DNAT на VyOS, чтобы вы могли управлять многоуровневыми трафиковыми задачами.