Назад | Перейти на главную страницу

Ошибка перенаправления pf в Mac OS неверная cksum

Сценарий

Я хочу:

подключение к B на localhost: 8080 ---> A: 4000

Пример: следующая команда на терминале B должна достичь A

telnet localhost 8080

Конфиг

На клиенте B:

  1. Включите пересылку Mac OS

  2. pf настройки:

rdr proto tcp to any port 8080 -> 192.168.43.215 port 4000
#redirect all connections to port 8080 to server A on port 4000

nat proto tcp to any port 4000 -> 192.168.43.207
#nat all connections to port 4000 so that they will all go out on correct interface on B with IP 192.168.43.207

Тест

  1. бегать telnet localhost 8080 на Б.
  2. бегать pfctl -s state на B дает:
No ALTQ support in kernel
ALTQ related functions disabled
ALL tcp 192.168.43.215:4000 <- 127.0.0.1:8080 <- 127.0.0.1:65414       CLOSED:SYN_SENT
ALL tcp 127.0.0.1:65414 -> 192.168.43.207:42866 -> 192.168.43.215:4000       SYN_SENT:CLOSED
  1. бегать tcpdump -i en0 port 4000, на A дает:
19:33:39.569041 IP (tos 0x10, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 64)
    192.168.43.207.42866 > 192.168.43.215.4000: Flags [S], cksum 0x8b44 (incorrect -> 0x49e4), seq 463248686, win 65535, options [mss 16344,nop,wscale 6,nop,nop,TS val 3178015922 ecr 0,sackOK,eol], length 0
19:33:39.707955 IP (tos 0x10, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 64)
    192.168.43.207.42866 > 192.168.43.215.4000: Flags [S], cksum 0x8b44 (incorrect -> 0x497f), seq 463248686, win 65535, options [mss 16344,nop,wscale 6,nop,nop,TS val 3178016023 ecr 0,sackOK,eol], length 0
19:33:39.769274 IP (tos 0x10, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 64)
    192.168.43.207.42866 > 192.168.43.215.4000: Flags [S], cksum 0x8b44 (incorrect -> 0x491a), seq 463248686, win 65535, options [mss 16344,nop,wscale 6,nop,nop,TS val 3178016124 ecr 0,sackOK,eol], length 0
19:33:39.868295 IP (tos 0x10, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 64)

## More like this

Но служба, выставленная на порт 4000, похоже, ничего не получает.

Я пришел к выводу, что пакет действительно достиг A, но из-за cksum 0x5f5d (incorrect -> 0xc65a, в сервис как-то не передали.

Вопрос

Это pfошибка или моя конфигурация неверна? Как мне это исправить?