Обычно, достаточно написать на шлюзе одно rdr и одно pass правило, чтобы по какому то порту подключится к любому компу в сети.
Однако это не работает, если компьютер к которому нужно подключится:
Некоторые в такой ситуации запускают простенькую софтину, которая проксирует соединение из интернета в локалку на нужный адрес.
Минусом то что программа должна быть запущена, настроена, потребляет память и работает ощутимо медленнее чем ядерный PF.
rdr inet proto tcp from any to (self) port $host_port_ext -> $host_addr port $host_port nat on $int_if inet proto tcp from any to $host_addr port $host_port -> ($int_if) nat on $ext_if inet proto tcp from $host_addr port $host_port to any -> ($ext_if) pass in quick on $ext_if proto tcp from any to (self) port $host_port_ext keep state pass quick proto tcp from any to $host_addr port $host_port keep state
$int_if - внутренний интерфейс; ($int_if) - адрес внутреннего интерфейса $ext_if - внешний интерфейс; ($ext_if) - адрес внешнего интерфейса $host_port_ext - порт на “проксе” соединения на который будут отпроксированы на хост в локалку $host_addr - адрес хоста в локалке к которому нужно подключится извне $host_port - порт хоста в локалке к которому нужно подключится извне
rdr inet proto tcp from any to (self) port 9999 -> 192.168.1.7 port 22 nat on rl0 inet proto tcp from any to 192.168.1.7 port 22 -> 192.168.1.239 nat on rl0 inet proto tcp from 192.168.1.7 port 22 to any -> 1.3.8.1 pass quick proto tcp from any to (self) port 9999 keep state pass quick proto tcp from any to 192.168.1.7 port 22 keep state
Машина с фряхой была подключена к локалке, в локалке у неё был адрес 192.168.1.239, в инете 1.3.8.1 (оба на одном сетевом интерфейсе rl0), а мне нужно было по SSH попасть в рабочую станцию 192.168.1.7, у которой шлюз был прописан совершенно другой (туда у меня доступа не было).
В итоге подключаясь в инете на адрес 1.3.8.1:9999 я попадал на свою рабочую станцию.
Всего то 3 строчки правил заменили целую софтину. Три - потому как они делают всю работу, а две разрешающих отдельная история.