unified: Phantom Protocol 2025 complete archive integration
This commit is contained in:
294
release/Dockerfile.socks5-proxy
Normal file
294
release/Dockerfile.socks5-proxy
Normal file
@@ -0,0 +1,294 @@
|
||||
# Phantom SOCKS5 Proxy Dockerfile
|
||||
# Создает контейнер с SOCKS5 прокси через Phantom сеть
|
||||
|
||||
FROM ubuntu:22.04
|
||||
|
||||
LABEL maintainer="Phantom Protocol Team"
|
||||
LABEL description="SOCKS5 Proxy через Phantom сеть"
|
||||
LABEL version="1.0.0"
|
||||
|
||||
# Установка зависимостей
|
||||
RUN apt-get update && apt-get install -y \
|
||||
python3 \
|
||||
python3-pip \
|
||||
netcat-openbsd \
|
||||
curl \
|
||||
iproute2 \
|
||||
iptables \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Создание пользователя phantom
|
||||
RUN useradd -r -s /bin/false phantom
|
||||
|
||||
# Копирование исходного кода
|
||||
COPY src/ /usr/local/src/phantom/
|
||||
COPY tools/ /usr/local/bin/
|
||||
COPY examples/socks5-proxy.py /usr/local/bin/phantom-socks5-proxy
|
||||
|
||||
# Установка Python зависимостей
|
||||
RUN pip3 install --no-cache-dir \
|
||||
asyncio \
|
||||
aiohttp \
|
||||
cryptography \
|
||||
pysocks
|
||||
|
||||
# Создание директорий
|
||||
RUN mkdir -p /var/lib/phantom /var/log/phantom /etc/phantom
|
||||
|
||||
# Копирование конфигурационных файлов
|
||||
COPY docker/configs/socks5-proxy.conf /etc/phantom/
|
||||
COPY docker/scripts/socks5-entrypoint.sh /usr/local/bin/
|
||||
|
||||
# Установка прав
|
||||
RUN chmod +x /usr/local/bin/phantom-socks5-proxy \
|
||||
&& chmod +x /usr/local/bin/socks5-entrypoint.sh \
|
||||
&& chown -R phantom:phantom /var/lib/phantom /var/log/phantom
|
||||
|
||||
# Создание конфигурационного файла
|
||||
RUN cat > /etc/phantom/socks5-proxy.conf << 'EOF'
|
||||
# Phantom SOCKS5 Proxy Configuration
|
||||
|
||||
[phantom]
|
||||
# Узлы для подключения к Phantom сети
|
||||
bootstrap_nodes = ${PHANTOM_BOOTSTRAP_NODES:-127.0.0.1:8050}
|
||||
|
||||
# Количество хопов через Phantom сеть
|
||||
hops = ${PHANTOM_HOPS:-3}
|
||||
|
||||
# Логирование
|
||||
log_level = ${PHANTOM_LOG_LEVEL:-INFO}
|
||||
log_file = /var/log/phantom/socks5-proxy.log
|
||||
|
||||
[socks5]
|
||||
# Адрес и порт для прослушивания
|
||||
listen_host = ${SOCKS5_LISTEN_HOST:-0.0.0.0}
|
||||
listen_port = ${SOCKS5_LISTEN_PORT:-8080}
|
||||
|
||||
# Максимальное количество подключений
|
||||
max_connections = ${SOCKS5_MAX_CONNECTIONS:-100}
|
||||
|
||||
# Таймаут подключения (секунды)
|
||||
connection_timeout = ${SOCKS5_CONNECTION_TIMEOUT:-30}
|
||||
|
||||
# Буферизация данных
|
||||
buffer_size = ${SOCKS5_BUFFER_SIZE:-8192}
|
||||
|
||||
[security]
|
||||
# Разрешенные клиенты (IP адреса или подсети)
|
||||
allowed_clients = ${SOCKS5_ALLOWED_CLIENTS:-0.0.0.0/0}
|
||||
|
||||
# Запрещенные адреса назначения
|
||||
blocked_destinations = ${SOCKS5_BLOCKED_DESTINATIONS:-}
|
||||
|
||||
# Аутентификация (none, password)
|
||||
auth_method = ${SOCKS5_AUTH_METHOD:-none}
|
||||
|
||||
[performance]
|
||||
# Оптимизация производительности
|
||||
tcp_nodelay = ${SOCKS5_TCP_NODELAY:-true}
|
||||
tcp_keepalive = ${SOCKS5_TCP_KEEPALIVE:-true}
|
||||
reuse_address = ${SOCKS5_REUSE_ADDRESS:-true}
|
||||
EOF
|
||||
|
||||
# Создание скрипта entrypoint
|
||||
RUN cat > /usr/local/bin/socks5-entrypoint.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Запуск Phantom SOCKS5 Proxy"
|
||||
|
||||
# Замена переменных окружения в конфигурации
|
||||
envsubst < /etc/phantom/socks5-proxy.conf > /tmp/socks5-proxy.conf
|
||||
mv /tmp/socks5-proxy.conf /etc/phantom/socks5-proxy.conf
|
||||
|
||||
# Ожидание доступности Phantom узлов
|
||||
echo "⏳ Ожидание доступности Phantom сети..."
|
||||
IFS=',' read -ra NODES <<< "${PHANTOM_BOOTSTRAP_NODES:-127.0.0.1:8050}"
|
||||
for node in "${NODES[@]}"; do
|
||||
IFS=':' read -ra ADDR <<< "$node"
|
||||
host=${ADDR[0]}
|
||||
port=${ADDR[1]:-8050}
|
||||
|
||||
echo "Проверка узла $host:$port..."
|
||||
timeout=60
|
||||
while ! nc -z "$host" "$port" && [ $timeout -gt 0 ]; do
|
||||
sleep 1
|
||||
timeout=$((timeout-1))
|
||||
done
|
||||
|
||||
if [ $timeout -eq 0 ]; then
|
||||
echo "❌ Не удалось подключиться к узлу $host:$port"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Узел $host:$port доступен"
|
||||
done
|
||||
|
||||
# Создание лог файла
|
||||
touch /var/log/phantom/socks5-proxy.log
|
||||
chown phantom:phantom /var/log/phantom/socks5-proxy.log
|
||||
|
||||
echo "✅ Phantom SOCKS5 Proxy готов к запуску"
|
||||
echo " Прослушивание: ${SOCKS5_LISTEN_HOST:-0.0.0.0}:${SOCKS5_LISTEN_PORT:-8080}"
|
||||
echo " Хопов через Phantom: ${PHANTOM_HOPS:-3}"
|
||||
echo " Bootstrap узлы: ${PHANTOM_BOOTSTRAP_NODES:-127.0.0.1:8050}"
|
||||
|
||||
# Запуск SOCKS5 прокси
|
||||
exec su-exec phantom python3 /usr/local/bin/phantom-socks5-proxy \
|
||||
--host "${SOCKS5_LISTEN_HOST:-0.0.0.0}" \
|
||||
--port "${SOCKS5_LISTEN_PORT:-8080}" \
|
||||
--hops "${PHANTOM_HOPS:-3}" \
|
||||
--verbose
|
||||
EOF
|
||||
|
||||
# Установка su-exec для безопасного переключения пользователя
|
||||
RUN apt-get update && apt-get install -y su-exec && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Создание health check скрипта
|
||||
RUN cat > /usr/local/bin/socks5-health-check << 'EOF'
|
||||
#!/bin/bash
|
||||
# Health check для SOCKS5 прокси
|
||||
|
||||
# Проверка, что процесс запущен
|
||||
if ! pgrep -f "phantom-socks5-proxy" > /dev/null; then
|
||||
echo "SOCKS5 прокси не запущен"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверка, что порт прослушивается
|
||||
port=${SOCKS5_LISTEN_PORT:-8080}
|
||||
if ! nc -z localhost "$port"; then
|
||||
echo "SOCKS5 порт $port не доступен"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверка подключения к Phantom сети
|
||||
if ! timeout 5 python3 -c "
|
||||
import socket
|
||||
import sys
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.settimeout(5)
|
||||
bootstrap_nodes = '${PHANTOM_BOOTSTRAP_NODES:-127.0.0.1:8050}'.split(',')
|
||||
for node in bootstrap_nodes:
|
||||
host, port = node.split(':')
|
||||
s.connect((host.strip(), int(port.strip())))
|
||||
s.close()
|
||||
break
|
||||
else:
|
||||
sys.exit(1)
|
||||
except:
|
||||
sys.exit(1)
|
||||
"; then
|
||||
echo "Phantom сеть недоступна"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "SOCKS5 прокси работает нормально"
|
||||
exit 0
|
||||
EOF
|
||||
|
||||
RUN chmod +x /usr/local/bin/socks5-health-check
|
||||
|
||||
# Создание тестового скрипта
|
||||
RUN cat > /usr/local/bin/test-socks5-proxy << 'EOF'
|
||||
#!/bin/bash
|
||||
# Тестирование SOCKS5 прокси
|
||||
|
||||
echo "🧪 Тестирование Phantom SOCKS5 Proxy"
|
||||
|
||||
proxy_host=${SOCKS5_LISTEN_HOST:-127.0.0.1}
|
||||
proxy_port=${SOCKS5_LISTEN_PORT:-8080}
|
||||
|
||||
echo "Прокси: $proxy_host:$proxy_port"
|
||||
|
||||
# Тест 1: Проверка доступности прокси
|
||||
echo "Тест 1: Проверка доступности прокси..."
|
||||
if nc -z "$proxy_host" "$proxy_port"; then
|
||||
echo "✅ Прокси доступен"
|
||||
else
|
||||
echo "❌ Прокси недоступен"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Тест 2: Проверка SOCKS5 handshake
|
||||
echo "Тест 2: Проверка SOCKS5 handshake..."
|
||||
if timeout 10 python3 -c "
|
||||
import socket
|
||||
import struct
|
||||
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.settimeout(10)
|
||||
s.connect(('$proxy_host', $proxy_port))
|
||||
|
||||
# SOCKS5 authentication request
|
||||
s.send(b'\x05\x01\x00')
|
||||
|
||||
# Receive authentication response
|
||||
response = s.recv(2)
|
||||
if response == b'\x05\x00':
|
||||
print('SOCKS5 handshake успешен')
|
||||
else:
|
||||
print('SOCKS5 handshake неудачен')
|
||||
exit(1)
|
||||
|
||||
s.close()
|
||||
except Exception as e:
|
||||
print(f'Ошибка SOCKS5 handshake: {e}')
|
||||
exit(1)
|
||||
"; then
|
||||
echo "✅ SOCKS5 handshake успешен"
|
||||
else
|
||||
echo "❌ SOCKS5 handshake неудачен"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Тест 3: Проверка проксирования HTTP запроса
|
||||
echo "Тест 3: Проверка проксирования HTTP запроса..."
|
||||
if command -v curl > /dev/null; then
|
||||
if timeout 30 curl -s --socks5 "$proxy_host:$proxy_port" http://httpbin.org/ip > /dev/null; then
|
||||
echo "✅ HTTP проксирование работает"
|
||||
else
|
||||
echo "⚠️ HTTP проксирование не работает (возможно, нет интернета)"
|
||||
fi
|
||||
else
|
||||
echo "⚠️ curl не установлен, пропуск HTTP теста"
|
||||
fi
|
||||
|
||||
echo "🎉 Тестирование завершено"
|
||||
EOF
|
||||
|
||||
RUN chmod +x /usr/local/bin/test-socks5-proxy
|
||||
|
||||
# Открытие портов
|
||||
EXPOSE 8080
|
||||
|
||||
# Переменные окружения по умолчанию
|
||||
ENV PHANTOM_BOOTSTRAP_NODES=127.0.0.1:8050
|
||||
ENV PHANTOM_HOPS=3
|
||||
ENV PHANTOM_LOG_LEVEL=INFO
|
||||
ENV SOCKS5_LISTEN_HOST=0.0.0.0
|
||||
ENV SOCKS5_LISTEN_PORT=8080
|
||||
ENV SOCKS5_MAX_CONNECTIONS=100
|
||||
ENV SOCKS5_CONNECTION_TIMEOUT=30
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
|
||||
CMD /usr/local/bin/socks5-health-check
|
||||
|
||||
# Рабочая директория
|
||||
WORKDIR /var/lib/phantom
|
||||
|
||||
# Точка входа
|
||||
ENTRYPOINT ["/usr/local/bin/socks5-entrypoint.sh"]
|
||||
|
||||
# Метаданные
|
||||
LABEL org.opencontainers.image.title="Phantom SOCKS5 Proxy"
|
||||
LABEL org.opencontainers.image.description="SOCKS5 прокси сервер через Phantom анонимную сеть"
|
||||
LABEL org.opencontainers.image.version="1.0.0"
|
||||
LABEL org.opencontainers.image.authors="Phantom Protocol Team"
|
||||
LABEL org.opencontainers.image.url="https://phantom-protocol.org"
|
||||
LABEL org.opencontainers.image.source="https://github.com/phantom-protocol/phantom"
|
||||
LABEL org.opencontainers.image.licenses="MIT"
|
||||
|
||||
Reference in New Issue
Block a user