Я пытаюсь настроить перенаправление адаптивного веб-портала на CentOS, используя следующую конфигурацию:
Эта конфигурация работает для первых нескольких пакетов, но затем в ответе сервера внезапно порт назначения оказывается поврежденным. Трассировка пакета выглядит так:
Клиент: Хост, выполняющий исходный веб-запрос. Сервер: исходное место назначения для запроса. Портал: сервер адаптивного портала.
Эта трассировка пакета берется из места, которое может видеть трафик клиента и портала. Строки, начинающиеся с c: со стороны клиента, а p: со стороны портала.
c: client:57877 -> server:80 [SYN]
p: client:1092 -> portal:80 [SYN] NAT adjusted SYN
p: portal:80 -> client:1092 [SYN, ACK]
c: server:80 -> client:57877 [SYN, ACL] NAT reversed on the SYN/ACK
c: client:57877 -> server:80 [ACK]
c: client:57877 -> server:80 HTTP GET
p: client:1092 -> portal:80 [ACK]
p: client:1092 -> portal:80 HTTP GET
p: portal:80 -> client:1092 [ACK]
c: server:68 -> client:57877 [ACK]
^^ WTF?!?
На этом этапе соединение залито. Клиент не ожидает пакета на этом порту и отправляет RST. Номер сломанного порта увеличивается на 1 при каждой попытке подключения (предположительно, с этого момента он будет работать после 12 попыток). Все повторные передачи имеют один и тот же неработающий номер порта в ответе. Понятия не имею, что могло быть причиной этого.
Это ошибка или я что-то не так делаю? У этой машины действительно несколько необычная конфигурация. Настроен как мост. Чтобы применить правило NAT только к пакетам, идущим в одном направлении, пакеты сначала помечаются правилом NAT ebtables, и эта отметка проверяется при применении iptables NAT.
Это на Enterprise Linux 6 с ядром 2.6.32-279.5.2.el6.x86_64
Правило NAT:
target prot opt in out source destination
DNAT tcp -- ilb any anywhere anywhere multiport dports http,https mark match 0x8 to:<portal IP>
ilb - это мост.