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

Как долго живут отображения Nat?

Насколько я понимаю, NAT может произойти примерно так:

Два клиентских ПК 192.168.1.2 и 192.168.1.3 открывают соединение с src port = 12345. Шлюз получает их и должен использовать NAT, поэтому один из них остается как 12345, а другой остается как 12346, когда он выходит на внешний IP 1.1.1.1.

192.168.1.2:12345                            1.1.1.1:12345 <-> 2.2.2.2:80
                  -----> 192.168.1.1 ----->
192.168.1.3:12345                            1.1.1.1:12346 <-> 3.3.3.3:443

Когда пакеты возвращаются в 1.1.1.1, он должен отображаться на правильный внутренний IP-адрес и порт. Для этого потребуется какая-то таблица сопоставления.

Интересно, как долго обычно продержится этот стол?

  1. x Минуты / Часы?
  2. Пока не увидит, что соединение закрывается?

Так, например, если у меня есть протокол, который нерегулярно отправляет данные в любом случае, существует ли риск, что сопоставление исчезло, и другая сторона видит соединение как закрытое (не получает подтверждения)?

В Linux есть ли способ увидеть эту таблицу?

Интересно, как долго обычно продержится этот стол?

Кажется, они управляются следующими ключами sysctl. Прилагаю в качестве примера то, что у меня есть на моей машине (никогда не настраивал их, должны быть значения по умолчанию).

> sysctl -a 2>/dev/null | grep ip_conntrack_.*timeout
net.ipv4.netfilter.ip_conntrack_generic_timeout = 600
net.ipv4.netfilter.ip_conntrack_icmp_timeout = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_max_retrans = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent2 = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_udp_timeout = 30
net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 180

Так, например, если у меня есть протокол, который нерегулярно отправляет данные в любом случае, существует ли риск, что сопоставление исчезло, и другая сторона видит соединение как закрытое (не получает подтверждения)?

Похоже, что тайм-аут для установленных TCP-соединений составляет 5 дней (432000 секунд). Думаю, у вас все будет хорошо, если вы не используете протокол на основе UDP.

В Linux есть ли способ увидеть эту таблицу?

Да. Либо в /proc/net/nf_conntrack (третий столбец) или используя conntrack -L.

Дополнительные ресурсы: