vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Вчера в десятом часу вечера отключилось электричество в Бужаниново. Причем не только в нашем СНТ но и в окрестных деревнях.

Было интересно наблюдать в поселковом чате обсуждение этой проблемы.

Вообще конечно, в наше время отключение электричесва забавная вещь. Ноутбуки - продолжают работать, роутер продолжает - у них у всех аккумуляторы. Телефоны и планшеты - тоже, они вообще мобильные устройства. Гаснет верхний свет, но комнату продолжают освещять отстветы от компьютерного экрана. Поэтому и в чате активность продолжается. Правда оключение энергии совпало с какими-то глюками у мегафона и я воочию наблюдал средний пинг до ya.ru в 11 секунд.

Стал вяло размышлять о том, что надо пойти в сарай и выкопать там из-под груды всякого хлама бензогенератор. И надолго ли хватит бензина у него в баке. Полной канистры рядом там точно нет, поскольку я уже третий год как перешел с бензотриммера и бензопилы на аккумуляторные и запасы бензина для садового инструмента не пополняю. А что было, постепенно куда-то израсходовалось. То ли на протирку чего-нибудь, то ли на растопку мусоросжигательной бочки.

Канистры в общем, конечно, совсем нет. Есть какие-то пластиковые емкости, в которые лет пять назад еще на бензоколонках вполне наливали, но с тех пор там к этому стали строже отноститься.

В общем решил что до рассвета холодильник не разморозится и лег спать. А часов в одиннацать электричество дали. Но вообще, наверное, надо учения по запуску генератора произвести. А то в этом году второй раз отклчюают уже (первый раз был на майские, когда нас тут не было).

X-Post to DW

vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Интересно, как испортилось понятие VPN. Почти так же как испортилось понятие телефонный звонок. В наше время, "у меня зазвонил телефон" это почти эквивалентно "спам пришел". А когда-то еще пару-тройку десятилетий назад телефон был средством общения людей, у которых есть не только что сказать друг другу. но и что совместно делать.

Электронная почта, что характерно, испортилась в меньшей степени. Хотя тоже испортилась.

VPN исходно это Virtual Private Network. Способ объединить компьютеры принадлежащие кому-то (человеку, фирме, сообществу), подключенныхе через разных провайдеров и находящиеся в физически разных местах, для того чтобы они могли взаимодействовать между собой. Особенно актуально в связи с тем что интернет тоже испортилися и из peer-to-peer сети превратился в сочетание серверов и фактически терминалов. Поэотому удаленно работать с компьютером, подключенным через другого провайдера, за парой NAT-ов и файрволлов не получается без наложения на общедоступную сеть виртуальной частной.

Но сейчас VPN в масовом сознании это "средство обхода цензуры". А не средство взаимодействия между удаленными компьютерами. Компьютеров в этой модели нет. Есть веб-странички и бразуеры.

X-Post to LJ

Про хостинг

2025-07-17 09:39
vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Интересно, а у какого хостера в России сейчас имеет смысл покупать VPS?

Требования:

  1. 100Gb места
  2. Чтобы можно было держать почтовый сервер (первичный MX для пары доменов)
  3. Чтобы можно было tun, ipsec, wg и так далее. Т.е. полноценная виртуализация, а не VZ-контейнер.
  4. Все это в пределах 10круб/мес.

Количество ядер, объем памяти и т.д. некритичны пары ядер и пары гигов вполне хватит, php-шные вебсайты мне хостить не надо.

X-Post to LJ

И еще о ssh vpn

2025-07-12 19:32
vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Разобрался тут, как использовать опцию -w у ssh. Надо будет в рассказку дописать.

Токен %T в LocalCommand вполне работает. А на серверной стороне у команды которая передана в командной строке ssh есть переменная среды SSH_TUNNEL.

Получилось следующее:

  1. На сервере требуется опция PermitTunnel yes и PermitRootLogin yes в глобальном sshd_config и у рута в .ssh/authorized_keys ключи клиентов. Надо их ограничить, чтобы ничего лишнего не делал, прописав там command и прочее
  2. На клиенте в глобальном ssh_config PermitLocalCommand yes
  3. На сервере в /usr/local/bin скриптик sshnetsetup
  4. На клиенте в /usr/local/bin sshnetclient и sshvpn
  5. На клиенте в /etc/ssh файлиk vpn.conf, содержащий следующией настройки

```

 # !/bin/sh
 # Config file for  ssh vpn   

 # DNS name of server to connect to (required)
 SERVER=example.com
 # IP of this computer in VPN (required)
 MY_IP=192.168.217.194
 # IP of server in VPN (required)
 SERVER_IP=192.168.217.193
 # network to route via server (optional)
 NET=192.168.217.128/25
 # Port for dynamic port forwarding (optional)
 SOCKS_PORT=1080

```

SERVER - это имя сервера куда ходить по ssh в открытом интернете. А MY_IP и SERVER_IP - "серые" адреса внутри vpn. SOCKS_PORT - это чтобы не держать отдельной ssh-сессии для ssh -D, NET - это если нам сеть нужна не для обхода блокировок. а как виртуальная частная сеть, объединяющая наши компьютеры, вошедшие в интернет через разных провайдеров. На каждом клиенте для рута генерируется ключевая пара ssh и открытый ключ помещается руту на сервер.

На этом настройка заканчивася. Дальше запускаем sshvpn, оно устанавливает соединение и voila.

Скрипт sshvpn имеет следующий вид:

  #!/bin/sh
  if [ "$(id -u)" -ne 0 ]; then
     sudo "$0"
     exit "$?"
  fi
  if ! [ -f /etc/ssh/vpn.conf ]; then
      echo "No /etc/ssh/vpn.conf found"
      exit 1
  fi
  . /etc/ssh/vpn.conf
  ssh -w "any:any" -o LocalCommand="sshnetclient %T"  ${SOCKS_PORT:+-D "localhost:$SOCKS_PORT" }"$SERVER" sshnetsetup "$MY_IP"

Собственно интересны тут две последние строчки - прочитать конфиг и запустить ssh c кучей параметров из этого конфига. На клиенте в резулаьте выполнится следующий скрипт

#!/bin/sh
. /etc/ssh/vpn.conf
DEVICE="$1"
ip addr add dev "$DEVICE" local "$MY_IP" peer "$SERVER_IP"
ip link set "$DEVICE" up
[ -n "$NET" ] && ip route add "$NET" via "$SERVER_IP"

Он прочитает тот же конфиг и сконфигурирует интерфейс, имя которого ему передано в командной строке через токен %T (см раздел TOKENS в man ssh_config)

На сервере выполняется вот такой скрипт:

#!/bin/sh
client=$1
if  [ -z "$client" ]; then
    client="${SSH_ORIGINAL_COMMAND##* }"
fi
ip addr add 192.168.217.193 peer $client dev $SSH_TUNNEL
ip link set $SSH_TUNNEL up
# now wait until other side would break connection
cat

Он конфигурирует интерфпейс указанный в переменной среды SSH_TUNNEL в переданный ему в командной строке из клиентского sshvpn IP-адрес, а потом запускает команду cat, т.е. ждет ввода на stdin до упора. Пока SIGINT не прилетит. Если в authorized_keys мы пропишем command=/usr/local/bin/sshnetsetup, то параметр $MY_IP sshd в скрипт не передаст. Зато засунет оригинальную команду в SSH_ORIGINAL_COMMAND, откуда этот адрес мы и выкусываем. Особые параноики могут там использовать какой-нибудь sed, чтобы убедиться что ORIGINAL_COMMAND это действительно sshnetsetup ip-address.

При таком сетапе, когда IP-адреса клиентам назначаются явным образом и прописываются на клиентах же в конфиг, нет необходимости что-то делать с динамическим DNS можно всех клиентов статически прописать.

Теперь бы еще разобраться как совместить это дело с SessionType=none (aka -N) и RemoteCommand.

vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

У ssh есть, как известно, ключик -w который позволяет аллоцировать на обоих концах виртуальный сетевой интерфейс и гонять через свое ssh-соединение любой траффик.

К сожалению никакого удобного сервиса, аналогичного тому что есть почти у всех прочих фич ssh вокруг этой опции не сложилось.

Получается следующее

  1. На обоих концах пользователь должен быть рутом, а то будет ошибка device setup failed.
  2. Команды для конфигурирования интерфейа и маршрутов нужно запускать самому, никакого сервиса не предусмотрено.
  3. Предусмотрена возможность передачи имени аллоцированного интерфейса в команды, указанные как LocalCommand и RemoteCommand, но у меня что-то нифига не получилось.

Соответсвенно встает задача как организовать работу по схеме "звезда". Т.е. когда есть n девайсов, которые могут ходить по ssh на некий центральный сервер, и данный сервер должен им устроить полноценную виртуальную сеть, вне зависимости от того, сколько из них и в каком порядке пришли. Полноценную, это значит что они видят не только сервер и выполняющиеся на нем серверные процессы (dovecot, postfix, http-proxy), но и друг друга. Поичем друг друга полноценным способом.

Ну собственно, очевидный вариант - прописать каждому девайсу при его настройке номер tun-интерфейса, который оно должно запрашивать на сервере, а дальше в зависимости от этого номера плясатьj, назначая IP.

Интерфейс у них там по умолчанию point-to-point но можно включить режим ethernet. Правда не совсем понятно есть ли в этом хоть какой-то смысл.

Этот вариант мне не нравится, но сойдет для сельской местности.

Далее, у команды которая выполняется в ssh-сессии может быть переменная вреды SSH_USER_AUTH, указывающая на файлик, где лежит инфрмация о пользовательском ключе. (Чтобы ее включить, в sshd_config напишите ExposeAuthInfo yes) можно взять этот файлик, прочитать его, потом поискать сооответствующий ключ в authorized_keys и найти там последним полем комментарий, который как правило, содержит имя машины, на которой сгенерена ключевая пара. Дальше уже танцевать от имени машины. Это удобно, если все клиенты - линуксовые машины и админ серевра все равно знает их по имени (что, впрочем, необхдимо и для того, чтобы пользователи могли с одной машины к другой обращаться по имени).

Все примерны, которые мне удалось нагуглить в интернете, используют ifconfig. Он у нас вроде как deprecated, хотя в пакет net-tools в trixie поставляется.

Но аналогичных результатов можно добиться и с использованием iproute2.

  ip addr set $address peer $serveraddress dev $device
  ip link set $device up

на клиенте

  ip addr set $serveraddress peer $adddess dev $device
  ip link set $device up

на сервере.

Вообще, видимо, самое логичное - запускать ssh с ключиком -w из скрипта передавая на сервер в параметрах и номер интерфейса и ip-адрес. Это несколько менее удобно чем хранить всю конфигурацию на сервере, но что делать.

Profile

yurikhan: (Default)
Yuri Khan

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
26 2728293031 

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2025-07-24 10:31
Powered by Dreamwidth Studios