Настройка простого SOCKS5 прокси-сервера для личного использования

Буквально пару недель назад развернулась настоящая эпопея с Телеграмом и его возможной блокировкой. Казалось счет шел на дни, но пока похоже конфликт на данной стадии исчерпан и Телеграм блокироватся не будет. Однако что-то мне подсказывает, что потенциальный читатель этой статьи примерно из зимы-весны 2018 года, когда вступили в силу новые пункты закона Яровой и Телеграм опять хотят заблокировать или уже это сделали.

Благо господин Дуров уже завез обновление на все платформы с поддержкой SOCKS5-прокси. Поэтому я решил написать простой минигайд о том, как сделать собственный прокси-сервер на дешевеньком VPS за 5 баксов.

Приступим!

Тема прокси для меня была весьма новой, поэтому пришлось сначала немного погуглить, чтобы разузнать что же за ПО для этого пресловутого SOCKS5 нужно вообще. Выбор быстро пал на Dante в виду его невероятно простой настройки.

За основу теперь я беру Debian 9, так как Debian 8 морально устарел. Ставим dante-server:

sudo apt-get install dante-server

Сходу демон Dante, danted, почему-то падает. Видимо косяк мейнтейнера пакета. Так что сразу лезем в конфиг:

sudo nano /etc/danted.conf

---

logoutput: stderr
internal: eth0 port = 1080
external: eth0

socksmethod: username
user.privileged: root
user.unprivileged: nobody
user.libwrap: nobody

client pass {
        from: 0/0 to: 0/0
        log: error
}

socks pass {
        from: 0/0 to: 0/0
        log: error
}

Перед вами откроется подробный конфиг с множеством комментариев. В принципе вы можете просто всё удалить и вставить туда мой вариант, представленный выше. Но можно изучить его, раскомментировать и исправить нужные параметры.

Немного подробностей

socksmethod: username -- для авторизации по системному пользователю. Разумеется можно вообще написать none, но тогда ваш сервер рискует попасть в публичные "бесплатные списки". Можно использовать хитрый механизм pam c целым RADIUS-сервером, который будет авторизировать сотни пользователей. Но всё же моей целью был личный сервер для себя и друзей, а не высоконагруженный продакшен-сервер на тысячи пользователей :)

user.privileged: root -- вместо дефолтного proxy ставим root, потому что нам нужно читать файл /etc/passwd для авторизации по системному пользователю.

А вот блоки client pass и socks pass и мутят всю магию прокси. Разумеется, можно покурить матчасть и поставить гору различных умных правил, но мне нужен был простой прокси, который в случае чего будет работать не только для Телеграма.

Конфиг готов?

Ctrl^O -- сохраняем конфиг, Ctrl^X -- выходим из nano. Теперь будет разумным сделать отдельного пользователя, особенно если вы не хотите чтобы пароль от вашего VPS узнали друзья, подключаясь к вашему прокси.

sudo useradd proxy
sudo passwd proxy
[Вводим дважды пароль]

Готово, пользователь создан. Осталось только перезапустить службу:

sudo systemctl restart danted

Всего нужно будет помнить 4 настройки: IP-адрес вашего сервера, порт (в моем конфиге 1080), логин (в моем примере proxy) и пароль, который вы этому пользователю указали. Коннект должен пройти удачно.

Небольшая заметка

Я немного перфекционист и решил сделать субдомен для прокси, чтобы моим знакомым и друзьям не нужно было запоминать странный IP-адрес. Однако столкнулся с забавной сложностью. Дело в том, что в домене я прописал A- и AAAA-записи сразу, так как сервер поддерживал IPv6. Однако изначально я настроил сервер Dante без поддержки IPv6. В итоге мой ПК пытался подключится по умолчанию через IPv6, но не получал ответа. Возможно кому-то это пригодится, потому что я потратил на это не мало часов...

P.S. Ссылки на прокси в Телеграме можно распостранять в интересном формате: https://t.me/socks?server=IP&port=PORT&user=USERNAME&pass=PASSWORD