В каком поле заголовка TCP/IP можно передать информацию и как её закодировать?
Имеется схема сети ( с условными IP адресами) клиент(192.168.0.10/24) -> Linux( gw 192.168.0.1/24) -> Интернет( различные устройства которые маршрутизируют пакеты) -> Linux(gw 192.168.1.1/24) - > клиент(192.168.1.10/24), Общение происходит в обе стороны, при том, что изначально допустим не будут известны сети( сеть заказчика) для настройки ната. Мы не можем знать откуда вообще поступит подключение.
Суть в том что нужно из одной сети подключится к другой ( Знаю что можно GRE и тому подобное, не буду уходить в глубь вопроса,а по существу)
Я написал небольшую утилиту, которая при помощи очередей (NFQUEUE) захватывает пакет и модифицирует так как необходимо из файла конфигурации (сети на линукс шлюзах работают на VRF), далее данные которые были изначально посылаю через NATS вот такой структурой (src_ip,dst_ip,sid) и в поле dataoffset ставил sid по которому другой шлюз уже доставал пришедшие данные и модифицировал пакет для дальнейшей передачи( наоборот точно также), но когда пустил в рабочую схему ( через cisco) пакеты перестали пролетать ( хотя флага нету что пакет фрагментированный циска все равно туда смотрела и пакеты дропались) передал так что поле sid стало в поле заголовка Identificator и всё забегало как надо, но хочется избавится он Nats, тут и вопрос как я могу закодировать и в каком поле маршрут пакета клиента (src_ip dst_ip) и так чтобы потом по алгоритму его и восстановить. Думал,что в поле urgent (но опять же оно используется при телнет соединении)
https://tproger.ru/explain/xyproblem/
Я вижу попытку использовать коллективный разум втемную. Такие вопросы задают либо люди, которые ничерта не понимают в решаемой задаче и не умеют логически рассуждать, либо желающие нахаляву решить сложную техническую проблему и извлечь личную выгоду.
Так это не работает - ваш вопрос должен быть полезен сообществу, а не лично вам, а для этого надо раскрыть детали.
Армянское Радио, необходимо подать трафик по уровню L3 а не L2 поверх L3, для того чтобы спутниковый модем мог организовать TCP-спуффинг, так как всё подключение идёт через GRE, сети заранее не известны необходимы их будет просто изменить и на конечном шлюзе собрать обратно.
Немного дополню, посмотрите на вот эту концепцию https://zeltser.com/c2-dns-tunneling/
Все тоже самое, только с заголовками TOS.
Конечно это будет жутко тормозить и возможно где то срежется маршрутизаторами.
Другой вариант это подняться до прикладного уровня, но как я понимаю это не ваш путь.
Совсем отмороженный вариант это своеобразная морзянка. То есть модифицируете пакет что бы у него было 2 каких либо различия. И работаете по протоколу:
поле TOS будет занято так как на устройстве которое находится за линуксом будет модем который использует это поле для QoS. даже если его использовать то каким алгоритмом можно кодировать информацию, чтобы понять информацию на другом шлюзе.
The Type of Service provides an indication of the abstract
parameters of the quality of service desired. These parameters are
to be used to guide the selection of the actual service parameters
when transmitting a datagram through a particular network. Several
networks offer service precedence, which somehow treats high
precedence traffic as more important than other traffic (generally
by accepting only traffic above a certain precedence at time of high
load). The major choice is a three way tradeoff between low-delay,
high-reliability, and high-throughput.
Bits 0-2: Precedence.
Bit 3: 0 = Normal Delay, 1 = Low Delay.
Bits 4: 0 = Normal Throughput, 1 = High Throughput.
Bits 5: 0 = Normal Relibility, 1 = High Relibility. Bit 6-7: Reserved for Future Use.
Вот сюда никто не должен лезть. Если ваш модем конечно не самый умный.
А алгоритм придумайте сами, я же не знаю что вы хотите передавать.
Например в 6 бит пишите флажок 1 в случае если это ваш пакет. На том конце слушайте пакеты.
Если этот бит взведен начинайте заполнять буфер, пусть он будет 1024 bit
заголовок | 00101010
данные | ..............
CRC | ..............