Настраиваем ККТ Штрих-М с ОФД в Linux

Сегодня мы будем настраивать работу ККТ ШТРИХ-М с ОФД в Linux. Мы уже настраивали кассовый аппарат ШТРИХ-М с ОФД для работы в Windows в статье «Подключение ККТ ШТРИХ-М по TCP/IP в Windows».
Установка драйвера ККТ ШТРИХ-М описана в статье «Установка драйвера ККТ ШТРИХ-М на Linux».
После этого запускаем утилиту Тест драйвера ККТ, после чего включить режим работы по RNDIS. По большому счету настройка драйвера и режим передачи данных в ОФД мало чем отличается от настройки в Windows.
Включаем режим RNDIS. Для этого в Сетевые интерфейсы в 9 строке ставим 1.

ШТРИХ-М, ККТ, кассовый аппарат, Linux, ОФД

После этого идем в таблицу Сетевой адрес и записываем или запоминаем все 4 значения Local IP. В нашем случае это: 192.168.147.111

ШТРИХ-М, ККТ, кассовый аппарат, Linux, ОФД

Советую отказаться от раздачи динамического IP-адреса посредством DHCP, а жестко привязать статистический адрес, а так же адрес DNS-сервера. Можно использовать общедоступные DNS-сервера, например сервер Google или Яндекс.
Перезагружаем кассовый аппарат. Это делать обязательно, так как ККТ меняет режим работы интерфейсов только при старте.

Теперь нужно проверить настройку работы RNDIS интерфейса. Запускаем Терминал под root и вводим команду:

dmesg

Смотрим на последние строки. Должно быть типа такого:

[60883.188052] usb 2-1: new full-speed USB device number 2 using uhci_hcd
[60883.381720] usb 2-1: New USB device found, idVendor=18d1, idProduct=4ee4
[60883.381725] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[60883.381729] usb 2-1: Product: RNDIS
[60883.381732] usb 2-1: Manufacturer: NXP
[60883.381736] usb 2-1: SerialNumber: SHM001
[60883.800820] usbcore: registered new interface driver cdc_ether
[60883.820295] rndis_host 2-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 2-1:1.0 enx006037764280: renamed from eth0
[60884.326721] IPv6: ADDRCONF(NETDEV_UP): enx006037764280: link is not ready

Это обозначает, что система увидела RNDIS и сопоставила ей сетевой интерфейс 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

Часть работы выполнена. Теперь необходимо настроить маршрутизацию.
Отключаем переопределение DNS-сервера системы с помощью NetworkManager’а.
В Debian-подобных системах, например Ubuntu или Linux Mint сетевыми настройками управляет NetworkManager. Он перезаписывает файл /etc/resolv.conf, что бывает очень неудобно и не практично.
Отключаем перезапись файла resolv.conf добавлением опции в секцию main:

[main]
dns=none

Перезапускаем NetworkManager командой:

service network-manager restart

Теперь пора конфигурировать интерфейс в NetworkManager. Задаем сетевому интерфейсу понятное имя и присваиваем сетевой адрес. Данный адрес установлен по умолчанию в ККТ ШТРИХ-М: 192.168.137.111

ШТРИХ-М, ККТ, кассовый аппарат, Linux, ОФД

Включаем маршрутизацию на уровне ядра.
Раскомментируем или добавляем (если нет) строки в файле sysctl.conf по адресу /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

Проверяем пинг, после чего сохраняем правила для автозапуска:

ШТРИХ-М, ККТ, кассовый аппарат, Linux, ОФД
iptables-save > /etc/sysconfig/iptables
chkconfig --add iptables
chkconfig --level 345 iptables on
service iptables start

На этом настройка кассового аппарата ШТРИХ-М с передачей данных в ОФД на Linux окончена. Теперь кассовый аппарат можно подключить к необходимому ПО.