Как зарезервировать исходный порт tcp на linux? - PullRequest
0 голосов
/ 08 января 2019

Я работаю над простым решением для туннелирования трафика (Linux).

  1. Клиентская сторона создает интерфейс tun, маршрутизирует весь трафик на нем, упаковывает все поступившие пакеты и отправляет на серверную сторону через соединение udp или tcp.

  2. Ожидается, что сторона сервера будет работать как NAT. Измените IP-адрес источника, порт источника (для tcp / udp), поместите пакет на внешний сетевой интерфейс через sock_raw, прослушайте ответ через sock_raw, сохраните карту исходного-источника-порта <-> replace-source-port и отправьте ответы обратно клиенту.

Вопрос : как выбрать replaced-source-port? ОС выбирает их из эфемерных портов . Я не могу выбрать это сам, это вызвало бы конфликты. Ядро ОС выбирает порт после того, как я отправляю пакет через sock_raw, и у меня нет шансов построить карту исходных портов <-> замененных исходных портов. Даже если я сам выберу порт - ядро ​​ОС ответит tcp rst на все входящие tcp-пакеты с dst port, не связанные с конкретным приложением.

P.S. Я не уверен в общем решении для туннелирования тоже. Ваши предложения будут высоко оценены.

...