Squid: проброс интернета на удалённую ВМ
Бывает так: твоя ВМ в облаке не имеет публичного IP или доступ в интернет через NAT закрыт, а деплой требует wget/curl изнутри. Squid на промежуточном хосте с нормальным каналом решает проблему за десять минут.
Зачем это нужно
Пробрасываю интернет через Squid, когда ВМ в изолированном сегменте сети. Промежуточный хост с белым IP и доступом в сеть становится прокси-сервером. Приложение на удалённой машине ходит в интернет через туннель.
Реальные кейсы: тестовые стенды без внешней связности, CI/CD агенты в private subnet, временная маршрутизация трафика для отладки.
Установка и базовая настройка Squid
Ставлю на промежуточном хосте (Ubuntu/Debian):
Конфиг по умолчанию в /etc/squid/squid.conf. Минимальный рабочий конфиг:
Запускаю и добавляю в автозагрузку:
Проверяю, что слушает порт:
Настройка ACL и порта
Если нужен доступ только по SSH-туннелю с конкретного адреса, заменяю localnet на точный IP:
Для смены порта:
После изменения конфига применяю без рестарта:
Если Squid не запускается после изменений, смотрю лог: journalctl -u squid -n 50.
SSH-туннель до ВМ
На удалённой машине поднимаю туннель к промежуточному хосту:
-N — не открывать shell, только проброс. -L привязывает локальный порт 3128 к localhost:3128 на удалённом хосте.
Для фона:
Или через systemd user-сервис:
Настройка прокси на клиенте
На удалённой ВМ ставлю переменные окружения для приложений с поддержкой http_proxy:
Или永久но в /etc/environment:
Для curl/wget достаточно переменных. Для apt — дополнительно:
Проверяю:
Если возвращает IP промежуточного хоста — работает.
Проверка и логирование
Лог обращений Squid:
Формат: время клиент/статус код размер метод URL
Пример строки:
Коды ответа: TCP_HIT — взято из кэша, TCP_MISS — запрошено из сети, TCP_DENIED — доступ запрещён ACL.
Чтобы очистить кэш перед тестом:
| Флаг | Описание |
|---|---|
http_port | Порт прослушивания |
acl name src IP/mask | Правило доступа по IP |
http_access allow|deny | Разрешить или запретить ACL |
-k reconfigure | Перечитать конфиг |
-k shutdown | Корректно остановить |
-z | Создать кэш-директории |
По умолчанию Squid кэширует ответы. Для отладки отключаю кэширование: cache deny all в конфиге, затем squid -k reconfigure.
Девять минут настройки — и изолированная ВМ ходит в интернет через прокси. Если нужен HTTPS-прозрачный режим с подменой сертификатов — это уже другая история с настройкой SSL-bump и генерацией CA.