Я хочу создать простой сервер для проксирования TCP-соединений на шлюзе моей сети (без злонамеренного намерения), но рукопожатие TCP не работает.
Используя netfilter, мне удалось изменить IP-адрес и порт входящих TCP-пакетов, чтобы они перенаправлялись в мое приложение, а также вернули их к исходным на обратном пути, а также обновили все контрольные суммы.
Мой сервер в настоящее время отправляет обратно SYN-ACK, который попадает на предполагаемый хост, но ACK никогда не создается. Согласно wirehark, пакет сформирован правильно, с контрольной суммой проблем нет, значения SYN и ACK совпадают.
Вот вывод TCP Dump
Успешное рукопожатие без моего прокси
16:21:08.887938 IP 192.168.1.1.37513 > 192.168.2.56.12105: Flags [S], seq 4201716329, win 14000, options [mss 1400,sackOK,TS val 727682 ecr 0,nop,wscale 2], length 0
16:21:08.889870 IP 192.168.2.56.12105 > 192.168.1.1.37513: Flags [S.], seq 34328406, ack 4201716330, win 14480, options [mss 1460,sackOK,TS val 1879286956 ecr 727682,nop,wscale 5], length 0
16:21:08.891751 IP 192.168.1.1.37513 > 192.168.2.56.12105: Flags [.], ack 1, win 3500, options [nop,nop,TS val 727683 ecr 1879286956], length 0
Ошибка рукопожатия с моим прокси
16:21:49.767611 IP 192.168.1.1.37514 > 192.168.2.56.12105: Flags [S], seq 2057472079, win 14000, options [mss 1400,sackOK,TS val 731770 ecr 0,nop,wscale 2], length 0
16:21:49.768522 IP 192.168.2.56.12105 > 192.168.1.1.37514: Flags [S.], seq 1201001621, ack 2057472080, win 14480, options [mss 1460,sackOK,TS val 7621570 ecr 731770,nop,wscale 4], length 0
После этого клиент и сервер просто повторно отправят подтверждение / синхронизацию.
Есть ли что-то очевидное, что мне не хватает? Или у кого-нибудь есть совет, как мне начать отлаживать проблему?