- Евгений
Настраиваем ККТ Штрих-М на работу с ОФД в ОС Linux
Как оказалось, многие ИТ-специалисты боятся использовать на рабочих местах кассира ОС Линукс. Основная проблема - непонимание того, как произвести настройку кассового оборудования, в частности, передачу данных о пробитых чеках в "налоговую", а точнее - в ОФД: оператору фискальных данных.
В этой статье я расскажу о том, как настроить кассу и операционную систему на работу с любым ОФД на примере ККМ фирмы Штрих-М.
Если на ККМ отсутствует порт LAN
Для начала, надо с использованием стандартной утилиты "Тест драйвера Штрих-М" подключиться к кассе и в таблицах включить режим работы по RNDIS.

После изменения параметра идём в таблицу "Сетевой адрес". Я рекомендую изменить настройки получения адреса с динамического (DHCP) на статический и, в обязательном порядке (по крайней мере на этапе настройки), указать жестко адрес DNS-сервера. В моём случае доверия заслуживает Google-DNS.

После этих двух манипуляций необходимо ОБЯЗАТЕЛЬНО перезагрузить кассу (выкл-вкл). Т.к. только при старте она меняет режим работы интерфейсов.
Проверка интерфейса RNDIS в ОС Linux
Если всё сделано правильно, то после подключения ККМ к компьютеру переходим в root-консоль и смотрим, как у нас среагировала система на подключение USB-устройства.
Смотрим на последние строки, которые выдаст нам команда dmesg:
Если видим вот такое:
[60637.416033] usb 5-1: new full-speed USB device number 4 using uhci_hcd
[60637.609358] usb 5-1: New USB device found, idVendor=1fc9, idProduct=0083
[60637.609363] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[60637.609367] usb 5-1: Product: VCOM Port
[60637.609371] usb 5-1: Manufacturer: NXP
[60637.609374] usb 5-1: SerialNumber: SHM001
[60637.615554] cdc_acm 5-1:1.0: ttyACM0: USB ACM device
значит касса продолжает работать в режиме простого USB-устройства. Возможно, забыли перезагрузить ККМ.
А вот если так:
[60883.188052] usb 5-1: new full-speed USB device number 5 using uhci_hcd
[60883.381720] usb 5-1: New USB device found, idVendor=18d1, idProduct=4ee4
[60883.381725] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[60883.381729] usb 5-1: Product: RNDIS
[60883.381732] usb 5-1: Manufacturer: NXP
[60883.381736] usb 5-1: SerialNumber: SHM001
[60883.800820] usbcore: registered new interface driver cdc_ether
[60883.820295] rndis_host 5-1:1.0 eth0: register 'rndis_host' at usb-0000:00:1a.2-1, RNDIS device, 00:60:37:76:42:80
[60883.820436] usbcore: registered new interface driver rndis_host
[60883.951926] rndis_host 5-1:1.0 enx006037764280: renamed from eth0
[60884.326721] IPv6: ADDRCONF(NETDEV_UP): enx006037764280: link is not ready
значит система увидела RNDIS сетевую карту, сопоставила ей MAC-адрес и создала сетевой интерфейс с именем enx006037764280.
hexen@hdev:~$ ifconfig
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.49 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::113f:9580:f8ca:67db prefixlen 64 scopeid 0x20<link>
ether e0:cb:4e:79:b6:e1 txqueuelen 1000 (Ethernet)
RX packets 947700 bytes 1198300524 (1.1 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 572327 bytes 117697691 (117.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 1 collisions 0
enx006037764280: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::7204:96be:b06b:1a05 prefixlen 64 scopeid 0x20<link>
ether 00:60:37:76:42:80 txqueuelen 1000 (Ethernet)
RX packets 17 bytes 736 (736.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 23 bytes 4921 (4.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Настройка маршрутизации
1. Отключаем переопределение DNS-сервера системы NetworkManager'ом
В ОС семейства Ubuntu / Mint и ряде других сетевыми настройками ведает NetworkManager. В частности, он перезаписывает файл /etc/resolv.conf, что не очень практично, на наш взгляд. Поэтому мы отключаем перезапись путём добавления опции в секцию main:
[main]
dns=none
После этого обязательно перезапускаем NM чтобы он применил настройки
service network-manager restart
2. Кофигурация итерфейсов в NetworkManager
Задаём сетевому интерфейсу осмысленное имя и присваиваем сетевой адрес. Данный адрес (сеть) установлен в качестве значения по-умолчанию в самой кассе.

3. Включение маршрутизации
Включаем маршрутизацию на уровне ядра.
Добавляем / раскомментируем строки в /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.forwarding=1
Применяем параметры
sysctl -p
Настраиваем маскарадинг с помощью IPTables
$cat activateRNDIS.sh
#!/bin/sh
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
ETH_LAN="enp2s0"
ETH_RNDIS="enx006037764280"
iptables -A FORWARD -i $ETH_RNDIS -o $ETH_LAN -s 192.168.137.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
Проверяем проходимость пинга с кассы

Сохраняем правила, чтобы при перезапуске применились автоматом. Используется пакет Ubuntu/Debian iptables-persistent.