|
|||||||
Как создать сетевое соединение между двумя компьютерами по COM-порту в Linux
Время создания: 13.04.2022 13:24
Автор: xintrea
Текстовые метки: linux, com, порт, последовательный, соединение, сеть, интерфейс, slattach
Раздел: Компьютер - Linux - Сеть в Linux
Запись: xintrea/mytetra_syncro/master/base/16498454679uwhuxlt6e/text.html на raw.github.com
|
|||||||
|
|||||||
Иногда возникает необходимость соединить два старых компьютера в сеть, не имея под рукой никакого сетевого оборудования. Можно ли это сделать? Да, если на обеих компьютерах имеются COM-порты и запущен Linux. Причем Linux может быть не установлен, а просто запущен с Live-CD образа. Приведенный в данной статье способ создает вертуальный сетевой адаптер, работающий через COM-порт, и между компьютерами устанавливается полноценное сетевое соединение. Каждый компьютер получает свой IP-адрес, и все сетевые программы работают так, как будто компьютеры оборудованы полноценными сетевыми карточками. Нуль-модемный кабель мама-мама Единственно ограничение данного метода - скорость соединения. COM-порт - достаточно медленное устройство по современным меркам. Но если нужно поработать в текстовом терминале, передавая команды или небольшие файлы, то соединение по COM-порту может сильно помочь. Здесь не будет рассказываться о том, как спаять кабель для соединения по COM-порту. Проверенные схемы даны в следующей статье: Распиновка кабеля для соединения по COM-порту. Или можно купить готовый. При покупке следует понимать, что распайка внутри может быть совсем не нуль-модемная. Поэтому лучше покупать провод с разбирающимися, а не литыми, коннекторами, чтобы при необходимости их можно было перепаять. Определение COM-портов на компьютере с Linux Для начала нужно выяснить, как COM-порты компьютера видятся в системе. Если это настоящие COM-порты (а не COM-преобразователь, воткнутый в USB), то выяснить их неличие можно следующей командой (от рута): > dmesg | grep tty [0.000000] console [tty0] enabled [0.738204] 00:05: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A [0.761912] 0000:04:01.0: ttyS4 at I/O 0xd030 (irq = 18, base_baud = 115200) is a ST16650V2 [0.784281] 0000:04:01.1: ttyS5 at I/O 0xd020 (irq = 19, base_baud = 115200) is a ST16650V2 [3.804596] systemd[1]: Created slice system-getty.slice. В этом выводе видно три COM-порта. Порт ttyS0 - это порт, расположенный непосредственно на материнке. Порты ttyS4 и ttyS5 - это порты с платы расширения. Если же используется адаптер COM-порта через USB, то вначале нужно понять что это за устройство через команду: > lsusb ... Bus 003 Device 081: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port / Mobile Action MA-8910P ... После чего его так же можно поискать в dmesg либо по характерным частям названия, либо тоже с помощью подстроки "tty": > dmesg | grep tty [11310.118826] usb 3-4.1: pl2303 converter now attached to ttyUSB0 > dmesg | grep 2303 [11310.084263] usb 3-4.1: New USB device found, idVendor=067b, idProduct=2303, bcdDevice= 3.00 [11310.117607] usbcore: registered new interface driver pl2303 [11310.117612] usbserial: USB Serial support registered for pl2303 [11310.117626] pl2303 3-4.1:1.0: pl2303 converter detected [11310.118826] usb 3-4.1: pl2303 converter now attached to ttyUSB0 Здесь видно, что последовательный интерфейс обозначается как ttyUSB0. Этот интерфейс работает полность как последовательный COM-порт. Проверка физического соединения Далее, чтобы убедиться, что проводное соединение вообще работает, можно на обеих компьютерах запустить программу терминала minicom. Например, если первый компьютер использует интерфейс ttyS5, а второй ttyUSB0, то команды будут следующие. На первом компьютере: minicom -D /dev/ttyS5 На втором компьютере: minicom -D /dev/ttyUSB0 Если появляется ошибка minicom: невозможно открыть /dev/ttySxx: Отказано в доступе то нужно либо запустить minicom от рута, либо добавить текущего пользователя в группу, к которой принадлежит файл устройства: > ls -la /dev/ttyS5 crw-rw---- 1 root dialout 188, 0 апр 13 11:36 /dev/ttyS5 В данном случае используется группа dialout, именно в нее нужно добавить пользователя. В некоторых дистрибутивах данная группа может называться modem или еще как-нибудь. Если minicom успешно запустился на обеих машинах, и если параметры портов у компьютеров одинаковые, то соединение по терминалу сразу установится, и можно писать текст на одном компьютере, и он сразу будет отображаться на другом и наоборот. Если же параметры портов отличаются, надо войти в настройки minicom сочетанием клавиш Ctrl+A и потом отдельно нажать клавишу Z. В результате появится текстовое меню, в котором нужно нажать клавишу O для настройки конфигурации COM-порта: +-------------------------------------------------------------------+ | Список команд minicom | | | | Команды могут быть вы | | | | Основные функции Прочие функции | | | | Телефонная книга...D Запустить скрипт...G | Очистить экран.....C | | Отправить файлы....S Принять файлы......R | Конфигурация.......O | | Параметры порта....P Добавлять LF.......A | Приостановить......J | | Захват вкл/выкл....L Повесить трубку....H | Выход и сброс......X | | Отправить break....F Инициализировать...M | Выход без сброса...Q | | Настр. терминала...T Запустить Kermit...K | Режим курсора......I | | Перенос вкл/выкл...W Местное эхо вк/вык.E | Экран подсказки....Z | | Paste file.........Y Timestamp toggle...N | scroll Back........B | | Add Carriage Ret...U | | | |Выберите функцию или нажмите Enter для выхода | +-------------------------------------------------------------------+ Меню терминальной программы minicom. Виден застарелый баг русификации minicom - загадочная фраза "Команды могут быть вы" Убедившись, что соединение работает, надо обязательно выйти из minicom на обеих компьютерах, чтобы COM-порт не был занят при создании и использовании сетевых протоколов. Для выхода, в меню надо нажать клавишу X и подтвердить что пользователь хочет покинуть терминал. Создание сетевого устройства Для создания сетевого устройства на COM-порту потребуется утилита slattach. Данная утилита обычно входит в пакет net-tools. Если используется сетевой дистрибутив Linux, то скорее всего этот пакет уже установлен. В универсальных дистрибутивах, например в Debian Linux, данный пакет можно установить командой: apt-get install net-tools Сетевое устройство на COM-порте создается командой (под рутом): slattach /dev/ttyS5 Программа запускается и работает, поэтому чтобы она ушла в фон, можно в конце добавить амперсанд &. Если соединения трехпроводное, можно добавить опцию -L. Если нужно задать скорость порта, можно указать опцию -s. Если нужно задать протокол, то он задается опцией -p. Для целей соединения подойдут протоколы slip (classic SLIP), cslip (compressed SLIP), adaptive (adaptive CSLIP/SLIP): slattach -L -p slip -s 115200 /dev/ttyS5 Естественно, эти действия надо делать на обеих компьютерах, с учетом используемого COM-порта. Если программа slattach успешно запустилась, в Linux создастся виртуальный сетевой адаптер sl0, который можно увидеть следующей командой: > ip link ... 5: sl0: <POINTOPOINT,MULTICAST,NOARP> mtu 296 qdisc noop state DOWN mode DEFAULT group default qlen 10 link/cslip Видно, что сетевой адаптер существует, но он потушен (состояние DOWN). Его нужно включить и назначить ему сетевой адрес в любой "взятой с потолка" подсети: ip link set sl0 up ip addr add 192.168.100.1/24 dev sl0 Для второго компьютера действия те же самые, за исключением того, что надо не забыть указать другой IP-адрес, например 192.168.100.2. Все! Сетка между компьютерами поднята. Проверка сети Состояние виртуального сетевого адаптера можно посмотреть командой: > ip addr ... 5: sl0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 296 qdisc pfifo_fast state UNKNOWN group default qlen 10 link/cslip inet 192.168.101.1/24 scope global sl0 valid_lft forever preferred_lft forever Здесь видно, что интерфейс sl0 поднят (UP), и ему назначен сетевой адрес. Теперь можно пропинговать соседний компьютер: > ping 192.168.101.2 PING 192.168.101.2 (192.168.101.2) 56(84) bytes of data. 64 bytes from 192.168.101.2: icmp_seq=1 ttl=64 time=185 ms 64 bytes from 192.168.101.2: icmp_seq=2 ttl=64 time=185 ms 64 bytes from 192.168.101.2: icmp_seq=3 ttl=64 time=185 ms ... И со второго компьютер на первый пинги тоже должны проходить. В принципе, на этом все. Далее, если на компьютерах установлены серверы sshd, можно заходить друг на друга по ssh: ssh -l <userName> 192.168.101.2 Другими словами, с такой настройкой можно пользоваться любыми привычными сетевыми программами для связи между компьютерами. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|