Сетевые технологии
Туннели IPsec
IPsec и локальный NAT

Механизм IPsec реализован на более низком подуровне, чем NAT и фильтры (механизм netfilter), т.е. "ближе к периферии устройства". Преобразование пакетов производится следующим образом:

Для исходящих пакетов в публичную сеть — пакет сначала подвергается преобразованию Source NAT или Masquerading. После этого он попадает в лапы IPsec и выполняется проверка: а не подлежит ли он передаче в защищённом виде? В первую очередь, проверяется сочетание IP-адресов источника и назначения (left/rightsubnet). Но к этому моменту адрес источника в нём уже изменён на публичный адрес интерфейса! В результате пакет не попадает в туннель и уходит в публичную сеть в открытом виде. (Или он вообще уничтожается запрещающим фильтром.)

Взаимодействие IPsec с маршрутизацией и netfilter

Такая ситуация возникает в самой типичной задаче, когда требуется весь трафик в удалённый офис отправить через туннель, а весь остальной трафик — в публичную сеть через этот же самый интерфейс. Чтобы устранить проблему, необходимо добавить в цепочку NAT POSTROUTING исключающее правило для пакетов между приватными подсетями. Это правило должно иметь более высокий приоритет. Пример соответствующих фрагментов конфигурации (left — локальное устройство, right — удалённое):

ip
: nat
: : POSTROUTING
: : : 1
: : : : out-interface = "eth1"
: : : : destination = "!172.17.0.0/16"
: : : : target = "MASQUERADE"
tunnel
: ipsec
: : connections
: : : ToTheOtherOffice
: : : : leftsubnet = "172.16.0.0/16"
: : : : rightsubnet = "172.17.0.0/16"

Или другой вариант — добавить в цепочки NAT исключающее правило для пакетов между приватными подсетями. Это правило должно иметь более высокий приоритет. (Пример более уместен для центрального сервера, когда удалённых сегментов может быть несколько.)

ip
: nat
: : POSTROUTING
: : : 1
: : : : source = "172.16.0.0/16"
: : : : destination = "172.17.0.0/16"
: : : : target = "ACCEPT"
: : : 2
: : : : out-interface = "eth1"
: : : : target = "MASQUERADE"
tunnel
: ipsec
: : connections
: : : ToTheOtherOffice
: : : : leftsubnet = "172.16.0.0/16"
: : : : rightsubnet = "172.17.0.0/16"

Для входящих пакетов из публичной сети — сначала выполняется распаковка пакетов IPsec, и из них извлекаются приватные пакеты в том виде, в каком они существовали в удалённом сегменте приватной сети. Эти пакеты заново поступают на вход IP-стека и проходят все процедуры NAT, маршрутизации и т.п. в обычном порядке, с самого начала. В частности, если смотреть трафик на публичном интерфейсе с помощью утилиты tcpdump, то в трассе каждый входящий пакет будет фигурировать дважды: сначала в защищённом виде, потом в открытом.

Обратно в узел ipsec или .ip.nat...

© Network Systems Group 2015–2024 Отдел документации