Как создать двухуровневый SOCKS прокси и использовать его в качестве обратного прокси?

Как настроить прокси-сервер на Python, чтобы я мог подключаться к своему ПК с серым IP, используя его IP как точку выхода в интернет из любой точки мира? Код, который я написал, работает для VPS с белым IP, но не работает на ПК с серым IP. Вот мой код сервера:
  • 16 февраля 2024 г. 0:18
Ответы на вопрос 2
Для создания двухуровневого SOCKS прокси и использования его в качестве обратного прокси, вы можете использовать библиотеку PySocks для настройки прокси сервера на Python.

Вот пример кода, который может помочь вам настроить прокси сервер и использовать его в качестве обратного прокси:


```python
import socks
import socket
import sys

def create_reverse_proxy_server(local_ip, local_port, proxy_ip, proxy_port):
    # Создаем TCP-сокет для прокси сервера
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # Устанавливаем сокет прокси сервера
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, proxy_ip, proxy_port)
    
    # Настраиваем сокет сервера на использование прокси
    socket.socket = socks.socksocket
    
    try:
        # Привязываем сервер к указанному IP-адресу и порту
        server_socket.bind((local_ip, local_port))
        server_socket.listen(1)
        
        print(f"Обратный прокси сервер запущен на {local_ip}:{local_port}")
        
        while True:
            # Принимаем новые подключения
            client_socket, addr = server_socket.accept()
            print(f"Установлено подключение с {addr}")
            
            # Пробрасываем соединение через прокси
            remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            remote_socket.connect((proxy_ip, proxy_port))
            
            # Создаем два потока - один для чтения из клиентского сокета и записи в удаленный сокет, другой - наоборот
            threading.Thread(target=forward_traffic, args=(client_socket, remote_socket)).start()
            threading.Thread(target=forward_traffic, args=(remote_socket, client_socket)).start()
            
    except KeyboardInterrupt:
        print("Завершение работы сервера")
        server_socket.close()
        sys.exit()

# Функция чтения из одного сокета и записи в другой
def forward_traffic(source_socket, destination_socket):
    while True:
        data = source_socket.recv(4096)
        
        if len(data) > 0:
            destination_socket.send(data)
        else:
            break

if __name__ == "__main__":
    # Задаем параметры прокси сервера 
    local_ip = "127.0.0.1"  # IP-адрес для прослушивания на локальном компьютере
    local_port = 8080  # Порт для прослушивания на локальном компьютере
    
    proxy_ip = "1.2.3.4"  # IP-адрес прокси сервера
    proxy_port = 1080  # Порт прокси сервера
    
    # Запускаем прокси сервер
    create_reverse_proxy_server(local_ip, local_port, proxy_ip, proxy_port)
```

Установите библиотеку PySocks, если у вас еще нет ее установленной, используя команду `pip install PySocks`.

В коде выше создается TCP сокет для прокси сервера, который каждое входящее соединение перенаправляет через заданный SOCKS5 прокси.  Используется два потока для одновременного чтения данных из клиентского сокета и записи его в удаленный сокет, и наоборот.

Вы можете указать параметры прокси сервера (локальный IP-адрес и порт для прослушивания, IP-адрес и порт прокси сервера) в соответствующих переменных перед запуском прокси сервера.

Убедитесь, что настроили переадресацию портов на вашем маршрутизаторе, чтобы входящие подключения были перенаправлены на ваш компьютер.

Обратите внимание, что вы можете
Если на домашнем ПК линукс то можно реализовать так: 
на vds сервер openvpn, для двух клиентов — домашнего ПК и ПК из интернета с которого надо выйти в сеть от имени домашнего ПК. Ovpn в режиме что бы была связность между его клиентами. На домашнем ПК ставите сокс сервер dante, который слушает tun интерфейс . С клиента который находится во вне, но подключен к тому же впн серверу что и домашний пк, используя сокс сервер домашнего пк, выходите в интернет.
Если на домашнем ПК виндоуз то все так же только надо найти сокс сервер нормальный для вин, я в свое время не находил или не мог нормально настроить) есть 3proxy но как то не мог его завести под вин
Похожие вопросы