Переадресация портов в OS X 10.10

Я должен пересылать каждую интернет-страницу на свой локальный адрес, т.е. 127.0.0.1, используя OS X.

Я пробовал следующую команду, но она не имеет никакого эффекта:

echo " rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080 " | sudo pfctl -ef -

Я попытался исследовать точное значение приведенной выше строки, но не могу найти хорошего объяснения. Как выполнить эту переадресацию?

Редактировать 1 :

Допустим, пользователь вводит в браузере «www.google.com»; это должно иметь такой эффект -->

Пользователь должен быть перенаправлен на мою локальную страницу, которая находится по адресу 127.0.0.1:8080.

Теперь, если я нажму 127.0.0.1:8080, я увижу свой локальный портал.

Но я хочу, чтобы он отображался после перенаправления с "Google.com"

Я пишу следующее заявление. Но они не имеют никакого эффекта.

rdr pass on lo0 proto {tcp, udp} from any to any port 80 -> 127.0.0.1 port 7894 
pass out log(all) on em0 route-to lo0 inet proto {tcp, udp} from any to any port 80 keep state

Я пишу строки выше в своем файле привязки и добавляю привязку в pf.conf , используя rdr-anchor

Чего именно вы пытаетесь достичь?
Вы читали справочную страницу для pf.conf(5) и pfctl(8) ?
@techraf, я хочу перенаправить определенную страницу, скажем, «www.google.com» на мою локальную страницу, то есть 127.0.0.1:8080, которая может использоваться как локальный Google.com. Если бы мы могли перенаправить каждую страницу на мой локальный портал, тогда тоже все в порядке.
google.comсразу перенаправит вас на https и обойдет ваше перенаправление, если вы настроите перенаправление на порт 443, вы получите ошибку сертификата в браузере. Это то, чего вы пытаетесь достичь?
@PrafulD Вы все еще не понимаете часть «любому». «Любой» означает не все IP-адреса всего мира, а все IP-адреса локальной машины. Таким образом, IP-адрес Google (например, 216.58.201.206) не включен в параметр «с любого на любой порт 80»! Любой означает все IP-адреса локального (целевого/веб-сервера) (которые могут быть en0 (ethernet): 192.168.0.3/10.12.24.3, en1 (wifi): 192.168.1.3 и т. д.)
@klanomath, я новичок в этом. Можете ли вы сказать мне строки, которые я должен добавить в свой файл pf.conf, чтобы он перенаправлял google.com на мой локальный портал?
@PrafulD Пожалуйста, добавьте карту вашей сети (сетевое окружение). Вы по-прежнему не указали должным образом, находится ли пользователь только на локальном компьютере (портале) или другие клиентские компьютеры (с другими пользователями) в сети также должны быть перенаправлены на компьютер портала.
@klanomath, пользователь находится только на локальном компьютере. У меня есть Mac с подключением к Wi-Fi. и я хочу, чтобы он перенаправлялся на локальный портал самого себя.

Ответы (1)

Если я правильно понимаю ваш вопрос и ваш комментарий, вы пытаетесь создать что-то вроде локального портала авторизации.

Это невозможно сделать с помощью pfпростой переадресации. Задействовано гораздо больше вещей и настроек. Здесь (ссылка на bsdguides.org в github readme не работает: правильная ссылка ) вы найдете пример, как это сделать в OpenBSD. Решение может быть адаптировано для OS X при определенных обстоятельствах.


Правило rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080делает следующее:

rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
|   |    |              |
|   |    |              #from any IP (all source IPs) to any IP (all destination IPs of the local machine)
|   |    |              from any to any
|   |    #IPv4 Protocol TCP
|   |    inet proto tcp
|   #allow
|   pass
#redirect from port 80 to localhost:8080
rdr                                     port 80 -> 127.0.0.1 port 8080

Или: любой входящий ( rdrтолько перенаправляет входящие пакеты) TCP-трафик IPv4 (на любом интерфейсе) на порт 80 с любого IP на любой IP (на любом интерфейсе) локальной машины передается и перенаправляется на 127.0.0.1:8080.

Правило не перенаправляет запросы с локального клиентского компьютера для google.com:80 (т. е. 216.58.201.206:80) или 175.68.9.102:80 на 127.0.0.1:80, поскольку ни один из этих IP-адресов не является IP-адресом локального ( www-) серверная машина, и локальный (www-) сервер не знает о запросах.

Это не относится к исходящему трафику локальной машины, потому что это не входящий трафик. Сначала вы должны зациклить этот трафик:

Я добавил следующие две строки в свой файл pf.anchor, rdr pass on lo0 proto {tcp, udp} from any to any port 80 -> 127.0.0.1 port 7894 pass out log(all) on em0 route-to lo0 inet proto {tcp, udp} from any to any port 80 keep stateно он не работает.
@PrafulD Пожалуйста, добавьте содержание своего комментария к своему вопросу и точно объясните, чего вы хотите достичь. Последнее пока непонятно!