TL; DR : Я вижу, что хост ubuntu (который я полностью контролирую) отправляет пакет при определенных обстоятельствах. Как найти модуль приложения / ядра, ответственный за этот пакет?
Я разрабатываю самодельный NAT-блок, и я пришел к этому пункту:
Топология сети: [192.168.1.100] - [192.168.1.1 : 10.0.0.4] - [10.0.0.1]
192.168.1.1
является внутренним iface, а 10.0.0.4
- внешним. wget -O - 10.0.0.1
Когда я запрашиваю страницу с сервера, вот трафик, который я вижу на двух интерфейсах NAT:
No. Time Source Destination Protocol Length Info
1 0.000000000 ae:29:9f:0e:3a:0d da:32:d6:6c:18:e6 ARP 42 Who has 10.0.0.1? Tell 10.0.0.4
2 0.002477000 da:32:d6:6c:18:e6 ae:29:9f:0e:3a:0d ARP 42 10.0.0.1 is at da:32:d6:6c:18:e6
3 0.752175000 192.168.1.100 10.0.0.1 TCP 74 52054 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=1584 TSecr=0 WS=512
4 0.762395000 10.0.0.4 10.0.0.1 TCP 74 48394 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=1584 TSecr=0 WS=512
5 0.763218000 10.0.0.1 10.0.0.4 TCP 74 http > 48394 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 TSval=1587 TSecr=1584 WS=512
6 0.763230000 10.0.0.4 10.0.0.1 TCP 54 48394 > http [RST] Seq=1 Win=0 Len=0
11 0.770654000 10.0.0.1 192.168.1.100 TCP 74 http > 52054 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 TSval=1587 TSecr=1584 WS=512
12 0.771153000 192.168.1.100 10.0.0.1 TCP 66 52054 > http [ACK] Seq=1 Ack=1 Win=29696 Len=0 TSval=1589 TSecr=1587
13 0.771350000 192.168.1.100 10.0.0.1 HTTP 172 GET / HTTP/1.1
7 0.781889000 10.0.0.4 10.0.0.1 TCP 66 48394 > http [ACK] Seq=1 Ack=1 Win=29696 Len=0 TSval=1589 TSecr=1587
8 0.782015000 10.0.0.1 10.0.0.4 TCP 54 http > 48394 [RST] Seq=1 Win=0 Len=0
9 0.782163000 10.0.0.4 10.0.0.1 HTTP 172 GET / HTTP/1.1
10 0.782173000 10.0.0.1 10.0.0.4 TCP 54 http > 48394 [RST] Seq=1 Win=0 Len=0
14 0.791486000 10.0.0.1 192.168.1.100 TCP 54 http > 52054 [RST] Seq=1 Win=0 Len=0
15 0.792103000 10.0.0.1 192.168.1.100 TCP 54 http > 52054 [RST] Seq=1 Win=0 Len=0
Другими словами, происходит следующее (игнорирование ARP):
Я считаю, что мое приложение, работающее с NAT, не способно отправлять RST пакет. Я подозреваю, что он исходит от NetFilter, но я не знаю, как это подтвердить.
Как мне узнать, откуда пришел этот пакет (# 6)?
PS Я запускаю его в mininet 2.2.1 под ubuntu 14.04
Можете ли вы проверить, что источник / клиент, отправляющий исходный SYN-пакет, на самом деле НЕ является двумя конечными точками с одним и тем же IP-адресом, совместно используемыми за NAT ??? Вы должны сначала проверить это, прежде чем мы сможем решить эту проблему за вас. Пожалуйста, подтвердите и свяжитесь с нами. Один из способов тестирования - использовать SSH из окна NAT в окно клиента, и это соединение должно быть сброшено в течение минуты или двух, если «клиент (исходный отправитель SYN в вашем сценарии выше)» на самом деле является двумя конечными точками с одним и тем же IP-адресом.