У меня есть хост FreeBSD, который служит точкой входа в дополнительные системы во внутренней сети. Таким образом, у меня есть pf
настроен для перенаправления входящего трафика на определенных портах (например, порт 5000) на локальный адрес хоста в одной из тюрем, на которой запущена сетевая служба на этом компьютере. Это выглядит так:
---port 5000--->[Main host]
|
|---port 5000--->[Machine A]
|~~~~~~~~~~~~~~~~[Machine B]
Перенаправление осуществляется по правилу PF:
rdr pass on egress proto tcp from any to $IP port 5000 -> $MACHINE_A_IP
Это состояние, которое я почти всегда хочу, и оно настроено по умолчанию. Однако мне иногда хотелось бы временно перенаправить порт 5000 на машину B, например:
---port 5000--->[Main host]
|
|~~~~~~~~~~~~~~~~[Machine A]
|---port 5000--->[Machine B]
Я попытался установить привязки PF, чтобы облегчить это, но, поскольку я новичок в PF, мне трудно разбирать документацию, чтобы охватить этот вариант использования.
Как задать динамические правила PF на главном хосте для временного перенаправления 5000 с машины A на машину B?
Правильный способ добиться этого - использовать таблицу в качестве цели для перенаправления. Вы можете изменить содержимое таблицы без перезагрузки pf, используя pfctl
. Просто имейте в виду, что существующие состояния брандмауэра будут продолжать пересылать трафик на старый хост до тех пор, пока потоки TCP не будут закрыты или пока не истечет время ожидания «потоков UDP».