Находясь за пределами брандмауэра нашей компании, я использую сценарий для туннелирования через SSH и предоставления нашей внутренней вики-страницы моей машине с OSX. Есть ли команда, которая временно сообщает OSX о разрешении на мой локальный порт при настройке туннеля?
Я надеюсь использовать следующую последовательность:
ssh -f external-proxy.example -L 8001:internal-wiki.example:8000 -N
[СДЕЛАЙТЕ ЧТО-ТО ЗДЕСЬ]
ввод URL внутренний-wiki.example: 8000 в моем браузере заставляет его прозрачно просматривать локальный: 8001
Другие детали:
У меня есть решение для вас, оберните вашу команду ssh в сценарий bash:
#!/bin/bash
function control_c {
echo -en "\n## Caught SIGINT; Clean up /etc/hosts and Exit \n"
sed -i '' "/internal-wiki/d" /etc/hosts
exit $?
}
trap control_c SIGINT
trap control_c SIGTERM
(sleep 5; open http://internal-wiki.example:8001 &)&
echo '127.0.0.1 internal-wiki.example' >> /etc/hosts
ssh -L8001:internal-wiki.example:8000 -f external-proxy.example -N
Объясняя:
/etc/hosts
/etc/hosts
с переходным входомПриношу свои извинения, если этого недостаточно для ответ, У меня недостаточно комментариев, чтобы здесь комментировать.
думаю / etc / hosts возможно лучший вариант. Я не знаю, каков ваш процесс разборки, но вы можете добавить удаление /etc/hosts
вход как его часть.
Также я думаю, что смена порта не будет работать с /etc/hosts
решение. Вы можете составить карту localhost:8000
к internal-wiki.example:8000
?
Тогда вы могли бы добавить что-то вроде 127.0.1.1 internal-wiki.example
к /etc/hosts
и удалите линию при остановке туннеля вот так: sed -i '' '/127.0.1.1 internal-wiki.example/d'
(не забудьте проверить это перед запуском, конечно).
Это должно позволить вам использовать http(s)://internal-wiki.example:8000
в вашем браузере.
Это не идеальное решение, но что-то лучшее (например, сопоставление портов), как мне кажется, потребует локального запуска http-прокси.
Как бы то ни было, добавление и удаление записей хоста - это то, как Parallels делает виртуальные машины адресуемыми по имени хоста. Это добавлено к моему /etc/hosts
пока мой xu17
ВМ запущена: 172.20.10.112 xu17.shared xu17 #prl_hostonly shared
Конечно, запустив прокси nginx справились бы с этим хорошо, но это может быть немного больше настройки, чем вы ищете?
Более простой вариант с netcat может работать в зависимости от веб-приложения.
# make fifo for second nc to transfer response back to first nc
mkfifo /tmp/proxy.pipe
nc -lk 8001 < /tmp/proxy.pipe | nc internal-wiki.example 8000 > /tmp/proxy.pipe
Затем, когда вы закроете туннель, вы можете убить nc
обрабатывать и удалять /tmp/proxy.pipe
Запустите веб-сервер балансировки нагрузки на своем Mac, балансируя между пересылкой localhost и реальным адресом вики, настроенным для предпочтения адреса пересылки localhost.
Когда соединение ssh не работает, балансировщик нагрузки заметит и направит ваши соединения на обычный адрес вики.
Настройте свой веб-браузер на прокси-соединения для вики через балансировщик нагрузки.
Что-то вроде кувалды, чтобы расколоть орех.
Службы имен (DNS, ldap, / etc / hosts) не «разрешают порты», они разрешают имена хостов. Это утверждение не совсем верно, но правильное объяснение здесь неуместно и требует времени.
Поскольку OSX использует ядро BSD, я предполагаю, что он также может «позаимствовать» оттуда много другого кода. Файлы ns resolver по умолчанию читают из / etc / hosts, но это можно изменить в Linux и BSD, установив переменную среды HOSTALIASES (в оболочке, из которой вы запускаете браузер), но это работает, только если нет '.' во имя. Если вы можете использовать URL-адреса без расширения. во имя это решит вашу проблему.
В качестве альтернативы вы можете запустить сценарий для настройки перенаправления портов для перенаправления пакетов, адресованных xxx.xxx.xxx.xxx:8000, на 127.0.0.1:8001 и наоборот для входящих пакетов. Но это довольно непростое решение.
В качестве альтернативы вы можете установить squid и использовать настраиваемый перенаправитель URL-адресов для перезаписи запросов (также возможно, если вы начнете использовать https - но сложно).
Гораздо более понятным вариантом было бы запустить правильное туннельное соединение через ssh. Я считаю, что OSX из коробки не поддерживает это, но есть совместимые с openvpn дополнения для osx
Если бы это был я, я бы просто настроил сценарии для обмена файлами с хостами, сохраняя весь трафик на одном порту и следя за тем, чтобы конфигурация по умолчанию была заменена во время загрузки и после завершения ssh-соединения.
Создайте запись временных хостов:
rm /tmp/hosts
cp /etc/hosts /tmp/hosts
echo "127.0.0.1 example.com" >> /tmp/hosts
mount --bind /tmp/hosts /etc/hosts
Удалить запись временных хостов (и вернуть файл постоянных хостов):
umount -f /etc/hosts
либо перезагрузка, либо выключение.