Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

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

В данном форуме немного понижены требования к Общим правилам форума, а именно:
1. Информативность темы
2. Отходить от первоначального смысла темы

!
В разделе запрещено создавать темы связанные с раскруткой игровых серверов

Самый простой VPN-сервер

, Простой VPN-сервер на golang
Статус пользователя Gecko
сообщение 17.11.2022, 20:10
Сообщение #1
Стаж: 7 лет 4 месяца

Сообщений: 1247
Благодарностей: 518
Полезность: 346

Думал ответить в теме, но решил отдельной статьёй.

Тема о ещё одном VPN-сервере.
От других подобных программ он ни чем не отличается, за исключением того, что он написан на golang, имя этого чуда Pangolin



Сервер и клиент под Linux
Клиент под Windows
Клиент под Android

Серверная часть работает исключительно под Linux, но в README есть инструкция как сие собрать на docker.

Из описания:
Цитата
Поддержка соединения TCP/UDP/ PTCP .
Для PTCP/TCP поддерживается многопользовательская аутентификация, передача с шифрованием. Для UDP без аутентификации.


PTCP это поддельный протокол TCP на канальном уровне. Он реализует рукопожатия, такие как TCP, но без повторной передачи после подключения.

Чем мне понравился pangolin,.. в первую очередь своей простотой, код очень читабельный и всё сразу понятно (просто очень не люблю непонятные вещи). Парень который всё это написал, опубликовал код уже доработанным и готовым.

Есть несколько замечаний которых вы не найдёте в README.

У вас должен быть установлен Go! Это и логично.
Про сборку Go, и клонирование репы я писать не буду, это очевидно и так.

Выполнить на сервере
Код
sysctl net.ipv4.ip_forward=1


Перед компиляцией программы важно выполнить это:
(подготовить сборку)

Код
go get github.com/xitongsys/pangolin/client
go get github.com/xitongsys/pangolin/config
go get github.com/xitongsys/pangolin/logging
go get github.com/xitongsys/pangolin/server



далее сама сборка программы
Код
go build main.go


далее копируем исполняемый файл программы (в Linux он сервер и клиент) для винды клиент нужно собирать/брать тут

Код
cp  ./main docker/pangolin


переходим в каталог ./docker/pangolin
Код
cd docker/pangolin

в нём наблюдаем каталог с конфигами *.json и файлом start.sh - этот файл нужно запускать с правами суперпользователя!

Также start.sh необходимо отредактировать. Просто убрав комментарии на первых 4 строках.

Это для сервера:
Код
SERVERIP=0.0.0.0
SERVERPORT=3001
TOKENS='["token01", "token02"]'
ROLE=SERVER


Для клиента:
Код
SERVERIP=your.server.ip.address
SERVERPORT=3001
TOKENS='["token01", "token02"]'
ROLE=CLIENT


token01 и token02 - заменяем на свои значения.
Ну и главное: SERVERIP (ip-адрес сервера)


Разбор файла запуска
start.sh
Код
#SERVERIP=0.0.0.0
#SERVERPORT=12345
#TOKENS='["token01", "token02"]'
#ROLE=SERVER

# Функция для сервера, сразу понимаем зачем нужны права суперпользователя
# Настроим нужные правила и интерфейс tun0
function start_server ()
{
    ip tuntap add dev tun0 mod tun
    ip addr add 10.0.0.2/8 dev tun0
    ip link set tun0 up
    ip link set dev tun0 mtu 1400
    ifc=`route -n | awk '{if($1=="0.0.0.0" && $8 != "tun0"){print $8; exit;}}'`
    INTERFACE="$ifc"
    ip=`ip addr show dev "$ifc" | awk '$1 == "inet" { sub("/.*", "", $2); print $2 }'`

         # Настройка правил маршрутизации
    SERVERIP=$ip
    iptables -t nat -F
    iptables -t nat -A POSTROUTING -o "$ifc" -j SNAT --to-source $ip
    iptables -P FORWARD ACCEPT
    iptables -A INPUT -p tcp --destination-port `expr $SERVERPORT + 1` -j DROP
      # Тут файл конфигурации клиента и сервера приобретает нужный вид путём копирования из шаблона .template
    cp -f configs/cfg_server.json.template configs/cfg_server.json
         # Тут функция replace изменяет в файле configs/cfg_server.json  {SERVERIP} на $SERVER, то есть, переводит условные обозначения переменной в переменные понятные bash
    replace configs/cfg_server.json
       # Тут запускаем нашу собранную программу  в качестве сервера, ключик "-с" указывает путь на конфигурационный файл
    ./main -c configs/cfg_server.json
}

# Функция для клиента, сразу понимаем зачем нужны права суперпользователя
# Настроим нужные правила и интерфейс tun0
function start_client ()
{
    ip tuntap add dev tun0 mod tun
    ip addr add 10.0.0.22/8 dev tun0
    ip link set tun0 up
    ip link set dev tun0 mtu 1400
      
       # Настройка правил маршрутизации
    iptables -t nat -F
    iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source 10.0.0.22
    iptables -P FORWARD ACCEPT
    ifc=`route -n | awk '{if($1=="0.0.0.0" && $8 != "tun0"){print $8; exit;}}'`
    INTERFACE="$ifc"
    
    gw=`route -n | awk '$1 == "0.0.0.0" {print $2}'`
    route add $SERVERIP gw $gw
    route add default gw 10.0.0.1
      # Добавляет адрес  ДНС сервера google
      # Этот файл автоматически обновляет NM при перезагрузки сетевого интерфейса
    echo "nameserver 8.8.8.8" > /etc/resolv.conf

      # Тут файл конфигурации клиента и сервера приобретает нужный вид путём копирования из шаблона .template
    cp -f configs/cfg_client.json.template configs/cfg_client.json
      # Тут функция replace изменяет в файле configs/cfg_client.json  {SERVERIP} на $SERVER, то есть, переводит условные обозначения переменной в переменные понятные bash.
    replace configs/cfg_client.json
      # Тут запускаем нашу собранную программу  в качестве клиента, ключик "-с" указывает путь на конфигурационный файл
    ./main -c configs/cfg_client.json
}


function replace ()
# Функция замены переменных понятные bash
{    
    sed -i "s/{SERVERIP}/$SERVERIP/g" $1
    sed -i "s/{SERVERPORT}/$SERVERPORT/g" $1
    sed -i "s/{TOKENS}/$TOKENS/g" $1
    sed -i "s/{INTERFACE}/$INTERFACE/g" $1
}


# По умолчанию, срабатывает то, что Вы присвоили переменной ROLE
# Либо сервер, либо клиент.
[[ "$ROLE" == "SERVER" ]] && start_server
[[ "$ROLE" == "CLIENT" ]] && start_client

echo "ERROR: pangolin exit"


По флагам (их не много):
Код
var configFile = flag.String("c", "cfg.json", "")
var logLevel = flag.String("l", "info", "")


Вроде всё.

Отредактировал: Gecko, - 17.11.2022, 21:16


Не отвечаю на ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   Цитировать сообщение
Статус пользователя Eka
сообщение 18.11.2022, 11:02
Сообщение #2
Стаж: 8 лет 2 месяца

Сообщений: 280
Благодарностей: 114
Полезность: 176

Насчет "самый простой впн сервер" уже понятно, что это не про него. Как у него с производительностью?


цитаты великих умов
Цитата
аналог libcurl в Go это net/http
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Gecko
сообщение 18.11.2022, 13:07
Сообщение #3
Стаж: 7 лет 4 месяца

Сообщений: 1247
Благодарностей: 518
Полезность: 346

Цитата(Eka @ 18.11.2022, 11:02) *
Насчет "самый простой впн сервер" уже понятно, что это не про него. Как у него с производительностью?

Скинь проще, буду очень благодарен (желательно на go) чтобы без зависимостей. Производительность нужно замерять и сравнивать. Сравни с тем решением которым пользуешься лично ты, будет полезно замеры опубликовать в этой теме. Хотя, я и не утверждал что это решение чем-то лучше вашего.
Плюсы этой программы лично для меня очевидны, для всех остальных плюсы скорее всего косвенные.

Для понимания, почему именно Go, не потому что я считаю, всё что на Go - априори лучшим, нет, не по этому, если ты программируешь на каком нибудь конкретном языке, то лучше (по моему скромному мнению), почти всё программное окружение]по возможности, создать именно на том языке с которым ты работаешь/изучаешь.


Не отвечаю на ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Eka
сообщение 18.11.2022, 13:34
Сообщение #4
Стаж: 8 лет 2 месяца

Сообщений: 280
Благодарностей: 114
Полезность: 176

Gecko,
Цитата
Скинь проще, буду очень благодарен

Уже кидали
OpenVPN web (лицо) (Пост #1155186)
Цитата
(желательно на go) чтобы без зависимостей

Цитата
go get github.com/xitongsys/pangolin/client
go get github.com/xitongsys/pangolin/config
go get github.com/xitongsys/pangolin/logging
go get github.com/xitongsys/pangolin/server

Это зависимости)
Странно, что ты не сделал форк и не добавил го мод, чтобы "сделать круче".

Ну и в целом недостаток этого решения в том, что надо тянуть го. Хотя это не удивительно, учитывая, что ты предлагаешь только гиковские решения. Но странно видеть в таких топиках слова "просто" )))


цитаты великих умов
Цитата
аналог libcurl в Go это net/http
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Gecko
сообщение 18.11.2022, 14:27
Сообщение #5
Стаж: 7 лет 4 месяца

Сообщений: 1247
Благодарностей: 518
Полезность: 346

Eka,
Цитата
go get github.com/xitongsys/pangolin/client
go get github.com/xitongsys/pangolin/config
go get github.com/xitongsys/pangolin/logging
go get github.com/xitongsys/pangolin/server


Сразу вопрос, и что это за зависимости?

UPD
Ладно, не буду затягивать опрос, эти зависимости, почти все в комплекте, и автор спокойно мог всё закинуть в одну репу.
По факту все зависимости которые нужно до установить состоят из двух пакетов, которые автор поддерживает по отдельности.
По сути, ничего постороннего у автора в комплекте нет.
А github.com/xitongsys/pangolin/server это в конечном счете локальный путь от корня который присвоен $GOPATH

По этому в нашем случае, вообще достаточно вот такой команды для сборки проекта
Код
var=https://github.com/xitongsys/pangolin; cd ${GOPATH}  && git clone ${var} && cd pangolin  && go get ${var#*https://} && go build main.go

вот и вся сборка.


Eka,
Цитата
Уже кидали

Ты код смотрел? Загляни в package.json

Eka,
Цитата
Странно, что ты не сделал форк и не добавил го мод, чтобы "сделать круче".


Не форк а репак, и без зависимостей, это может сделать любой кто хоть немного шарит в го.

Инструкция по сборке из исходников, для всего остального есть готовый архив.

Мне стало интересно насколько твой вариант проще.
Напиши инструкцию по сборке outline, Пожалуйста.

Отредактировал: Gecko, - 18.11.2022, 15:47


Не отвечаю на ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Eka
сообщение 18.11.2022, 16:36
Сообщение #6
Стаж: 8 лет 2 месяца

Сообщений: 280
Благодарностей: 114
Полезность: 176

Gecko,
Цитата
Ты код смотрел? Загляни в package.json

Зачем? Речь о простом запуске)) Мне не важно из скольки файлов состоит приложение. Речь о том, что проще запустить.
Цитата
Не форк а репак

Форк. Делаешь на гитхабе форк и коммитишь туда гомод. И не надо го гет выполнять.
Цитата
без зависимостей

Все, что ты го гетом подгрузил - это зависимости)
И выполнять го гет перед сборкой - ушербно. Просто проекту 3 года, а модули, наверное, в те времена и появились. Поэтому тут так. Поэтому я и сказал о том, что ты мог бы форкнуть проект, добавить го мод и скинуть ссылку уже на свою репу.
Например, на репу в своем гити, ты же наверняка им пользуешься, не просто так ведь ***валивал.
Цитата
Мне стало интересно насколько твой вариант проще.
Напиши инструкцию по сборке outline, Пожалуйста

"Мой" вариант про openvpn и инструкцию уже написали по ссылке, что я кидал))

Я уж молчу про то, что панголин - это очередное приложение, когда у тебя уже, наверняка, стоит опенвпн.
Если ничего из этого нет и есть желание поставить какой то мусор, то, конечно, никто не спорит))


цитаты великих умов
Цитата
аналог libcurl в Go это net/http
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Gecko
сообщение 18.11.2022, 22:15
Сообщение #7
Стаж: 7 лет 4 месяца

Сообщений: 1247
Благодарностей: 518
Полезность: 346

Eka,
Цитата
Все, что ты го гетом подгрузил - это зависимости)

Смотри

Код
mkdir -p ${GOPATH}/{github.com,src}
cd ${GOPATH}/github.com
git clone https://github.com/xitongsys/ethernet-go
git clone https://github.com/xitongsys/ptcp/ptcp
git clone  https://github.com/xitongsys/pangolin
ln -sf ${GOPATH}/github.com/pangolin ${GOPATH}/src/pangolin
cd ${GOPATH}/github.com/pangolin
go build main.go && cp  -a  ./main docker/pangolin
cd docker/pangolin && mc -e start.sh


ловкость рук и никакого go get, go.mod...
И заметь, всё в одном каталоге, без повышения прав пользователя, проект(ы) легко перенести на любую другую рабочую станцию и работать оффлайн.

Цитата
Форк. Делаешь на гитхабе форк и коммитишь туда гомод. И не надо го гет выполнять.

Именно репак, и github/gitea тут совсем не обязателен, можно создать готовый deb/rpm - для тех кому нужно быстро и сразу.

Цитата
Зачем? Речь о простом запуске)) Мне не важно из скольки файлов состоит приложение. Речь о том, что проще запустить.

Посмотри сюда, куда проще?
В одном файле и сервер и клиент
Код
bash start.sh

Код
./main -c configs/cfg_server.json  # Запуск сервера

Код
./main -c configs/cfg_client.json  # Запуск клиента


Цитата
"Мой" вариант про openvpn и инструкцию уже написали по ссылке, что я кидал))

Я про сборку из исходников.

Отредактировал: Gecko, - 18.11.2022, 22:39


Не отвечаю на ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Eka
сообщение 18.11.2022, 23:19
Сообщение #8
Стаж: 8 лет 2 месяца

Сообщений: 280
Благодарностей: 114
Полезность: 176

Gecko,
Цитата
Ловкость рук и никакого go get, go.mod...
И заметь, всё в одном каталоге, без повышения прав пользователя, проект(ы) легко перенести на любую другую рабочую станцию и работать оффлайн.

Ты сделал другим способом тоже самое, что делает go get
Цитата
Именно репак, и github/gitea тут совсем не обязателен, можно создать готовый deb/rpm - для тех кому нужно быстро и сразу.

Но ведь ты в своей статье предоставил ссылку на гитхаб, а не собранный deb/rpm пакет.
А форк нужен затем, что автор проекта, который ты скинул, забил на него 3 года назад. А тебе проект нравится, язык ты знаешь и поддерживать сможешь. И go mod запилишь и избавишься от этого бреда, в виде выполнения go get вручную.
Цитата
Посмотри сюда, куда проще?
В одном файле и сервер и клиент

Ну вот, выходит и статья не нужна, можно было ответ в 5 строчек уместить в соответствующей теме))
Цитата
Я про сборку из исходников.

Вот этого не понимаю, ладно бы на каком нибудь ресурсе соответствующем делиться, но мы тут домохозяйки, нам нужен опенвпн, установленный в 2 клика, или бесплатный хттп прокси для браузера))

Интересно посмотреть на установленный гити здешних пользователей. Или сайты на генераторах статики.


цитаты великих умов
Цитата
аналог libcurl в Go это net/http
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Gecko
сообщение 19.11.2022, 9:51
Сообщение #9
Стаж: 7 лет 4 месяца

Сообщений: 1247
Благодарностей: 518
Полезность: 346

Eka,
Цитата
Но ведь ты в своей статье предоставил ссылку на гитхаб, а не собранный deb/rpm пакет.

верно, но эта ссылка на сторонний проект, а вопрос был с твоей стороны в мой адрес и именно про форк, потому я и написал, что лучше репак. Я бы сделал в виде deb/rpm пакета ссылаясь на первоисточник на github.com.

Цитата
Вот этого не понимаю, ладно бы на каком нибудь ресурсе соответствующем делиться, но мы тут домохозяйки, нам нужен опенвпн, установленный в 2 клика, или бесплатный хттп прокси для браузера))

Я полагаю, все мы начинали с Windows (ну в большинстве было так), и первым вопросом лично с моей стороны был что куда нажимать

Сразу приношу извинения, если задел чьи-то чувства этим постом.

Мне уже уже давно не интересно в 2 клика, я в последнее время 60-70% работы провожу в shell, хоть я и не программист.


Не отвечаю на ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Gecko
сообщение 21.11.2022, 21:39
Сообщение #10
Стаж: 7 лет 4 месяца

Сообщений: 1247
Благодарностей: 518
Полезность: 346

К стати ))
АНБ США порекомендовало IT-компаниям отказаться от языков C и C++

Цитата
В связи с этим АНБ рекомендует организациям переходить на безопасные языки программирования, такие как C#, Go, Java, Ruby, Rust и Swift. По мнению экспертов, это поможет предотвратить возникновение определённых типов уязвимостей, связанных с памятью.


https://www.securitylab.ru/news/534754.php




Не отвечаю на ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Eka
сообщение 21.11.2022, 23:07
Сообщение #11
Стаж: 8 лет 2 месяца

Сообщений: 280
Благодарностей: 114
Полезность: 176

Gecko, АНБ США может рекомендовать что угодно и кому угодно. Более того, это не означает, что они откажутся от С))
Те задачи, которые решались этим языком, им решаться и продолжат. В иных случаях, все, что можно было перевести на другие яп - было переведено. Просто потому что все, что можно решить средствами других яп быстрее - ими и решается.
Шарп, го, ява, свифт - это все огромный бойлерплейт для мелких задач. А если задача не мелкая и стоит вопрос в скорости и памяти - это раст.
Руби мертвый.


цитаты великих умов
Цитата
аналог libcurl в Go это net/http
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя usercn
сообщение 31.12.2022, 20:16
Сообщение #12


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

Цитата
АНБ США порекомендовало IT-компаниям отказаться от языков C и C++


То есть языки, которые генерят быстрый компактный код уже не в тренде.


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Gecko
сообщение 31.12.2022, 20:55
Сообщение #13
Стаж: 7 лет 4 месяца

Сообщений: 1247
Благодарностей: 518
Полезность: 346

usercn, на самом деле без разницы на чем ты будешь писать текст описывающий логику для транслятора языка ))
С Новым Годом!


Не отвечаю на ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: