Установка Psiphon (psiphon-docker) на Ubuntu
Прокси-туннель для обхода блокировок на базе psiphon-tunnel-core — swarupsengupta2007/psiphon-docker. Поднимает HTTP- и SOCKS5-прокси с выбором региона выхода.
Каждый блок кода ниже рассчитан на копирование целиком.
Предполагается, что Docker и Docker Compose plugin уже установлены (см. страницу «Установка Docker и Docker Compose на Ubuntu»).
1. Подготовка каталога
sudo mkdir -p /opt/psiphon/config && sudo chown -R 1000:1000 /opt/psiphon && cd /opt/psiphon
/opt/psiphon выбран как каталог для стороннего софта по FHS — не привязан к домашней директории конкретного пользователя. Каталог config монтируется в контейнер и хранит psiphon.config — должен быть доступен на запись пользователю с указанными ниже PUID/PGID (в примере — 1000:1000, при других значениях chown нужно поправить соответственно).
2. docker-compose.yml
nano docker-compose.yml
Содержимое:
services:
psiphon:
image: swarupsengupta2007/psiphon:latest
container_name: psiphon
environment:
- PUID=1000
- PGID=1000
- HTTP_PORT=8080
- SOCKS_PORT=1080
- DEVICE_REGION=RU
- EGRESS_REGION=SG
volumes:
- ./config:/config
ports:
- 127.0.0.1:1080:1080
- 127.0.0.1:8080:8080
restart: unless-stopped
Docker и UFW. Как отмечено на странице первоначальной настройки сервера, Docker прописывает правила
ports:напрямую в iptables в обход UFW. Публикация на127.0.0.1:...вместо0.0.0.0(голого порта) не даёт достучаться до прокси снаружи — открывайте наружу только если это осознанное решение.
Переменные окружения
Применяются только при первом запуске, пока в /config ещё нет psiphon.config:
| Переменная | Описание | По умолчанию |
|---|---|---|
PUID |
UID процесса psiphon | 1000 |
PGID |
GID процесса psiphon | 1000 |
HTTP_PORT |
Порт HTTP-прокси | 8080 |
SOCKS_PORT |
Порт SOCKS-прокси | 1080 |
DEVICE_REGION |
Регион устройства | RU |
EGRESS_REGION |
Регион выхода трафика | SG |
PUID/PGID текущего пользователя:
id -u && id -g
Какой EGRESS_REGION выбрать из RU
Psiphon не публикует официальный актуальный список стран, где у него сейчас подняты серверы выхода — набор доступных EGRESS_REGION динамический и различается от инстанса к инстансу. Проверить фактически доступный список для конкретного контейнера — по его логам, строка AvailableEgressRegions:
docker logs psiphon-lt | grep AvailableEgressRegions
На практике встречался, например, такой список: AT, AU, BE, BR, CA, CH, DE, DK, ES, FR, GB, IE, IN, IT, JP, LT, NL, NO, PL, RS, SE, SG, US — обратите внимание, что скандинавских/прибалтийских кодов вроде FI, EE, LV там могло не быть вовсе, хотя по географии они ближе всего к RU. Если в EGRESS_REGION указать код, которого нет в списке доступных, клиент не сможет установить туннель (в логе не будет ConnectedServerRegion).
Кандидаты, отсортированные по географической близости к RU, которые стоит пробовать по очереди — но перед использованием сверяйтесь с фактическим списком выше:
| Приоритет | Код | Регион |
|---|---|---|
| 1 | LT |
Литва |
| 2 | PL |
Польша |
| 3 | SE |
Швеция |
| 4 | DE |
Германия |
| 5 | NO |
Норвегия |
| 6 | DK |
Дания |
| 7 | NL |
Нидерланды |
Если ни один код не подходит (сервер в этом регионе недоступен) или нужен более общий обход — оставьте EGRESS_REGION="" (пустая строка), тогда клиент сам выберет наименее нагруженный доступный сервер, без привязки к региону.
Замерить фактическую задержку для конкретного региона после запуска контейнера:
curl -x socks5h://127.0.0.1:1080 -o /dev/null -s -w 'time_total: %{time_total}s\n' https://ifconfig.me
Меняя EGRESS_REGION и пересоздавая контейнер (docker compose up -d --force-recreate), можно сравнить время ответа по разным кандидатам и оставить самый быстрый из реально работающих.
3. Запуск
docker compose up -d
4. Проверка
Статус контейнера и логи:
docker compose ps && docker logs -f psiphon
Healthcheck:
docker inspect --format='{{json .State.Health}}' psiphon
Ожидаемый статус — "Status":"healthy".
Проверка прокси:
curl -x socks5h://127.0.0.1:1080 https://ifconfig.me
curl -x http://127.0.0.1:8080 https://ifconfig.me
Вернувшийся IP должен соответствовать выбранному EGRESS_REGION.
5. Управление сервисом
docker compose restart # перезапуск
docker compose down # остановка и удаление контейнера
docker compose pull && docker compose up -d # обновление образа
6. Несколько регионов одновременно
EGRESS_REGION — это одно значение на один запущенный контейнер. Чтобы иметь под рукой сразу несколько регионов выхода — поднимают отдельный контейнер на каждый, с уникальными container_name, каталогом config и внешними портами:
services:
psiphon-lt:
image: swarupsengupta2007/psiphon:latest
container_name: psiphon-lt
environment:
- PUID=1000
- PGID=1000
- HTTP_PORT=8080
- SOCKS_PORT=1080
- DEVICE_REGION=RU
- EGRESS_REGION=LT
volumes:
- ./config-lt:/config
ports:
- 127.0.0.1:1080:1080
- 127.0.0.1:8080:8080
restart: unless-stopped
psiphon-de:
image: swarupsengupta2007/psiphon:latest
container_name: psiphon-de
environment:
- PUID=1000
- PGID=1000
- HTTP_PORT=8080
- SOCKS_PORT=1080
- DEVICE_REGION=RU
- EGRESS_REGION=DE
volumes:
- ./config-de:/config
ports:
- 127.0.0.1:1081:1080
- 127.0.0.1:8081:8080
restart: unless-stopped
psiphon-nl:
image: swarupsengupta2007/psiphon:latest
container_name: psiphon-nl
environment:
- PUID=1000
- PGID=1000
- HTTP_PORT=8080
- SOCKS_PORT=1080
- DEVICE_REGION=RU
- EGRESS_REGION=NL
volumes:
- ./config-nl:/config
ports:
- 127.0.0.1:1082:1080
- 127.0.0.1:8082:8080
restart: unless-stopped
Что важно не перепутать:
- Разные
container_name— иначе Docker откажется поднимать второй сервис. - Разные каталоги в
volumes(config-lt,config-deи т. д.) — каждый регион хранит свойpsiphon.config, смешивать их в одной папке нельзя. - Разные внешние порты — внутри контейнера порты одинаковые (1080/8080), наружу пробрасываются на разные (1080/8080, 1081/8081, ...), иначе конфликт портов на хосте.
- Каталоги под каждый регион создаются заранее, как в шаге 1:
sudo mkdir -p /opt/psiphon/config-lt /opt/psiphon/config-de /opt/psiphon/config-nl && sudo chown -R 1000:1000 /opt/psiphon.
Дальше в приложении просто выбираете локальный порт, соответствующий нужному региону выхода.
Что стоит сделать дополнительно
- Не менять переменные окружения после первого запуска без ручной правки/удаления
config/psiphon.config— на уже созданный конфиг они не влияют. - Если прокси должен быть доступен с других машин — не публиковать порт на
0.0.0.0без дополнительного контроля доступа (файрвол/аутентификация на уровне прокси). - Настроить бэкап каталога
config.
No comments to display
No comments to display