DECnet в Linux

Часть 2

Posted by Unik on 06.11.2019

Чтобы проверить работу DECnet, и посмотреть как оно работает, предлагаю запустить две виртуальные машины с Ubuntu 16.04. Одна из них уже создана в предыдущей части, а вторую можно создать копированием. Например я пользуюсь VirtualBox и там в меню есть пункт "Клонировать".

В decnet отсутсвует аналог протокола ARP и вместо этого используються MAC адреса сгенерированные на основе адреса. Можно подсчитать адрес самому или воспользоваться сервисом, например этим. Как подсчитать самому я описал здесь.

Далее я буду использовать такие адреса для примера:

1.522 - declin AA-00-04-00-0A-06
1.523 - dectst  AA-00-04-00-0B-06

Склонировав первую виртуалку, я прописал на обеих нужные MAC адреса, задав их в свойствах вирт. машины. Затем на хосте declin создаём файл /etc/decnet.conf со следующим содержимым:

#
# DECnet hosts file
#
#Node      Node     Name     Node        Line   Line
#Type      Address  Tag      Name        Tag    Device
#-----     -------  -----    -------   -----     ----
executor   1.522     name     declin    line     enp0s3
node       1.523     name     dectst

А на хосте dectst этот же файл /etc/decnet.conf уже с другим содержанием:

#
# DECnet hosts file
#
#Node      Node     Name     Node        Line   Line
#Type      Address  Tag      Name        Tag    Device
#-----     -------  -----    -------   -----     ----
executor   1.523     name     dectst    line     enp0s3
node       1.522     name     declin

Остальное нужно сделать на обеих машинах, будет одинаково. Даём права на чтение для всех:

chmod a+r /etc/decnet.conf

Редактируем файл /etc/decnet.proxy, добавив строку “.::. */DEFAULT”

# /etc/decnet.proxy
#
# DECnet proxy database.
# The format of this file is (one entry per line)
# node::remoteuser localuser
#
# Regular expressions are allowed for node and remote user. Remember these are
# POSIX regular expressions so use .* where you would use just * on VMS.
# Also it is IMPORTANT that whole names (node and user) are enclosed
# in anchors as below.
# The entries are checked in the order they appear in this file.
# * as a local user will be replaced by the remote username.
# # is a comment.
#
# Here are some examples (commented out of course):
#
# ^tramp$::^test$ chrissie # Explicitly convert 'test' on tramp to 'chrissie'
# ^zaphod$::.*    none     # Disable proxies from zaphod (assuming you don't have
#                          #   a user called 'none')
.*::.* */DEFAULT
# .*::.* decnet            # Like a default DECnet account
# .*::.* *                 # Equivalent to VMS *::* * proxy (make this last
#                          #   if you use it)

Это работает если на обеих машинах есть пользователь с одинаковой учёткой, иначе придеться здесь много всего добавлять. Необходимо создать файл /etc/default/decnet

# DNET_INTERFACES specifies the names of ethernet interfaces whose
# MAC address is to be set to the DECnet node address
#DNET_INTERFACES="all"
DNET_INTERFACES="enp0s3"
# DNET_DAEMONS lists the daemons to start when dnet-progs is installed.
#
DNET_DAEMONS="dnetd phoned"
dnetd_FLAGS="-vvvv"
dnroute_FLAGS="-v -2"
# The following two lines enable routing, note that if you are
# being a router, then add dnroute to the DNET_DAEMONS too
#ROUTING=1
PRIORITY=32

А так же понадобиться создать файл /etc/dnet.conf

# /etc/dnetd.conf
#
# Define DECnet objects
#
# Fields
# name:    object name (or * for any named object, number must be     0)
# number:  object number (or 0 for a named object)
# options: auth[,auto accept]:
#  auth:        Whether to authenticate users: Y     or N
#  auto accept: Should we accept incoming connections
#                This is needed for     non-decnet daemons
#                (not calling     dnet_accept)
# user:    If auth is N then use this user
# daemon:  program to run or 'internal'
#
# name         number    options  user           daemon
#
FAL            17            Y,N      none       fal
MIRROR         25            Y,N      root       internal
MAIL           27            N,N      vmsmail    vmsmaild
CTERM          42            N,N      root       ctermd
DTERM          23            N,N      root       rmtermd
NML            19            N,N      nobody     dnetnml
*              *             Y,R      none       internal

После этого всё должно заработать, запускаем скрипт из первой части в обеих виртуалках и можем попробовать пинг, не забыв указать правильные логин и пароль к удаленной машине :

$ sudo ./decnet.sh
1.522 For test, type: dnping HOST -u USER -p PASS

$ dnping dectst -u USER -p PASS
Sent 10 packets, Received 10 packets

Как видно 10 из 10 пакетов дошли, decnet работает. Не забудьте указать свои USER/PASS.

Ранее были установлены все необходимые утилиты, вот их назначение:

dneigh - выводит все узлы в сети, но работает только после запуска "phone"
dnping - проверка удаленнного узла, работает не так как пинг в tcp/ip а подключаеться к спец. сервису
phone - вызов удаленного узла для чата
sethost - подключение к удалённому узлу, как telnet
dndir - вывод содержимого каталога на удалённом узле: dndir dectst::[home.USER]*.*
dncopy - копирование файлов через DECnet, например dncopy -s test.txt 'dectst"USER PASS"::home:[USER]'
dntype - вывод содержимого файла на уд. узле
dndel - удаление файла на уд. узле
dntask - выполнение удаленно команды
dnsubmit - отправить пакетное задание
dnprint - печать на удаленной системе