1

Когда я попытался удалить некоторые провода Ethernet в моей домашней сети, я взял более старый ноутбук с Linux и попытался использовать его как своего рода Ethernet-2-WiFi-NAT-маршрутизатор (карта Wi-Fi не может выступать в качестве моста, поэтому я должен был сделать NAT). В основном это работает, но все клиенты за этим маршрутизатором NAT время от времени получают сетевые ошибки на соединениях TCP.

Во-первых, вот полная настройка:

INTERNET > wire > Standard Wi-Fi Router > air > Linux Router > Clients

После некоторого прослушивания маршрутизатора Linux и клиентов я обнаружил следующее:

  1. клиент, как обычно, подключается к удаленному серверу и получает некоторые данные
  2. клиент загружается (например, записывает данные на диск) и окно приема заполняется
  3. тогда клиент в основном говорит серверу подождать; в моем случае ACK с win = 0 или win <MTU - это последний ACK, который я вижу в перехвате перед разрывом соединения
  4. пока этот последний ACK путешествует, все еще есть некоторые пакеты, поступающие с удаленного сервера
  5. маршрутизатор Linux отвечает на каждый из этих пакетов с RST на удаленный сервер и поэтому разрушает соединение
  6. клиент запутался, потому что он получает RST от сервера в ответ на следующий пакет, который отправляет клиент

Так что это [5], это моя проблема здесь, и я хотел бы знать, почему это происходит и как это исправить.

Другие вещи, чтобы упомянуть:

  • Сама беспроводная сеть работает нормально
  • все клиенты не за коробкой Linux работают нормально
  • UDP работает нормально, насколько я могу судить
  • iptables на роутере Linux просто минимален
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -I FORWARD -i eth1 -o eth0 -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT # for static routing
iptables -I FORWARD -i eth0 -o eth1 -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT # for static routing

Я также обнаружил, что установка политики удаления цепочки ввода помогает, так как она отбрасывает нежелательные пакеты, которые приводят к сбросу, но это ИМХО просто грязное исправление.

0