Site Tools


software:freebsd:tcpproxy_on_pf

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
software:freebsd:tcpproxy_on_pf [2015/05/14 10:26]
– создано root
software:freebsd:tcpproxy_on_pf [2022/02/04 18:32]
– removed - external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== TCP proxy on PF ====== 
-Обычно, достаточно написать на шлюзе одно rdr и одно pass правило, чтобы по какому то порту подключится к любому компу в сети.\\ 
  
-Однако это не работает, если компьютер к которому нужно подключится: 
-  * фильтрует все адреса не принадлежащие локальной сети; 
-  * не прописал шлюз вообще; 
-  * прописал шлюз отличный от того, через который мы подключаемся. 
- 
-Некоторые в такой ситуации запускают простенькую софтину, которая проксирует соединение из интернета в локалку на нужный адрес.\\ 
-<code>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</code> 
- 
-**$int_if** - внутренний интерфейс; ($int_if) - адрес внутреннего интерфейса 
-**$ext_if** - внешний интерфейс; ($ext_if) - адрес внешнего интерфейса 
-**$host_port_ext** - порт на "проксе" соединения на который будут отпроксированы на хост в локалку 
-**$host_addr** - адрес хоста в локалке к которому нужно подключится извне 
-**$host_port** - порт хоста в локалке к которому нужно подключится извне 
- 
-  - Перенаправляем трафик адресованный компьютеру - "прокси" с Free BSD + PF [из инета] на определённый порт на нужный нам хост в локалке и нужный порт. 
-  - Заменяем в пакете из интернета адресованному для внутреннего хоста адрес источника на адрес нашего "прокси" в локалке. 
-  - В пакете от внутреннего хоста заменяем его адрес внешним адресом нашего "прокси". Адрес получателя заменится автоматом на основании предыдущего правила, которое оттранслирует его обратно. 
- 
- 
-Пример: 
-<code>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</code> 
- 
-Машина с фряхой была подключена к локалке, в локалке у неё был адрес **192.168.1.239**, в инете **1.3.8.1** (оба на одном сетевом интерфейсе rl0), а мне нужно было по SSH попасть в рабочую станцию **192.168.1.7**, у которой шлюз был прописан совершенно другой (туда у меня доступа не было).\\ 
-В итоге подключаясь в инете на адрес **1.3.8.1:9999** я попадал на свою рабочую станцию.\\ 
-Всего то 3 строчки правил заменили целую софтину. Три - потому как они делают всю работу, а две разрешающих отдельная история.\\ 
software/freebsd/tcpproxy_on_pf.txt · Last modified: 2022/02/05 04:37 by root