NAT для локального устройства на pfSense - что мне не хватает?

734
Stilez

У меня есть старое и странное устройство 1980-х годов (это часть раннего контроллера, который у меня был целую вечность).

У него жестко закодированный адрес 192.168.1.100, и, очевидно (возможно, из-за его возраста), он рассчитывает на подсеть 192.168.1.100/24 ​​и фактически не будет отвечать ни на что, если только он не из этой подсети. Он подключен к сетевой карте OPT1 на моем маршрутизаторе pfSense с интерфейсом 192.168.1.1/24.

То, что я хотел бы сделать, это настроить какое-то правило NAT или VIP в маршрутизаторе, чтобы мой рабочий стол мог напрямую с ним общаться. Мой настольный IP-адрес - 192.168.3.2, а сетевая карта имеет интерфейс 192.168.3.1/24. Например, любая из этих настроек:

  1. Вариант 1 - Пакеты, полученные на интерфейсе локальной сети от источника = 192.168.3.2 dest = 192.168.1.100, пересылаются на OPT1 как обычно, но с пакетом NAT, имеющим source = 192.168.1.1 (IP-адрес OPT1) dest = 192.168.1.100 - так устройство «видит» их как поступающие из требуемой подсети. Его ответы затем принимаются маршрутизатором на OPT1 и пересылаются по локальной сети обратно на 192.168.3.2.
  2. Вариант 2. Пакеты на интерфейсе локальной сети, которые отправляются в виртуальную локальную сеть. IP dest = 192.168.3.100 принимаются маршрутизатором, который «за кадром» пересылает их на OPT1 с измененным пакетом, чтобы иметь source = 192.168.1.1 (IP OPT1. ) dest = 192.168.1.100 - поэтому устройство «видит» их как поступающие из требуемой подсети. Затем его ответы принимаются маршрутизатором на OPT1 и пересылаются по локальной сети с источником 192.168.1.100, сопоставленным с 192.168.3.100, поэтому, когда они принимаются настольным компьютером, они, кажется, поступили с устройства в локальной сети, а не с вне этого.

Разница между этими двумя вариантами заключается в том, что в первом случае исходные пакеты отправляются не по IP-адресу, а маршрутизатор изменяет их источник при пересылке на OPT1. Во втором случае исходные пакеты вместо этого отправляются на виртуальный IP-адрес в локальной сети, и маршрутизатор изменяет их источник и назначение перед их пересылкой.

Оба они в значительной степени идентичны тому, что делает pfSense с виртуальными IP-адресами и другими опциями NAT, поэтому я уверен, что это не сложно сделать. Но я не могу заставить ни одну из этих работ - NAT - довольно сложная область!

0

1 ответ на вопрос

0
Stilez

Я нашел ответ. Решение называется Outbound NAT, который переводит IP-адрес источника или пакет, а не (как обычно) IP-адрес назначения.

К сожалению, документация является немного двусмысленной и легко неверно истолкованной для Исходящего NAT, так что это был полный ответ, который я нашел:

Я предполагал, что NAT будет применен к пакету, который был исходящим (то есть входил в маршрутизатор через некоторый интерфейс), но на самом деле он был применен к пакету, так как он исходящий от маршрутизатора, на исходящем интерфейсе.

  1. Я установил виртуальный IP-адрес типа «IP-псевдоним» (но, возможно, некоторые другие типы работали бы так же хорошо) с IP-адресом, с которого я хотел, чтобы пакет выглядел так, как будто он получен (что-то в диапазоне 192.168.1.0/24 в этот пример - например 192.168.1.5). Псевдоним IP должен быть на интерфейсе - я использовал интерфейс, на котором он оставил бы маршрутизатор (OPT1 в этом примере), а не тот, на который он поступает в маршрутизатор.

  2. Я включил гибридный NAT (ручной / AON NAT также сработал бы), а затем добавил правило исходящего NAT на том же интерфейсе (OPT1) с source = any (или с любым диапазоном IP-адресов, с которого фактически пришел пакет) и dest = IP-адрес назначения или его подсеть или что-то еще (я использовал 192.168.1.0/24). Затем я установил «адрес перевода», выбрав виртуальный IP-адрес, который я ввел на шаге 1, из раскрывающегося списка.

Это делает то, что я хочу. Пакет, отправленный на IP-адрес назначения, поступает из локальной сети и принимается NAT, когда он отправляется на OPT1 (интерфейс в правиле NAT). Поскольку src пакета соответствует «any», а его dest соответствует значению, введенному в правиле NAT (192.168.1.0/24), его источник переводится в 192.168.1.5, как требуется, перед отправкой через OPT1.

Захват пакета подтверждает это - когда я пингую, как описано в 1-м посте, захват пакета на интерфейсе OPT1 показывает эхо-запрос и ответ от 192.168.3.2 -> 192.168.1.100, но захват пакета на интерфейсе OPT2 показывает эхо-запрос и ответ от 192.168 .1.5 -> 192.168.1.100 по желанию.

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

Похожие вопросы