Механизм IPsec реализован на более низком подуровне, чем NAT и фильтры (механизм netfilter), т.е. "ближе к периферии устройства". Преобразование пакетов производится следующим образом:
Для исходящих пакетов в публичную сеть — пакет сначала подвергается преобразованию Source NAT или Masquerading. После этого он попадает в лапы IPsec и выполняется проверка: а не подлежит ли он передаче в защищённом виде? В первую очередь, проверяется сочетание IP-адресов источника и назначения (left/rightsubnet
). Но к этому моменту адрес источника в нём уже изменён на публичный адрес интерфейса! В результате пакет не попадает в туннель и уходит в публичную сеть в открытом виде. (Или он вообще уничтожается запрещающим фильтром.)
Такая ситуация возникает в самой типичной задаче, когда требуется весь трафик в удалённый офис отправить через туннель, а весь остальной трафик — в публичную сеть через этот же самый интерфейс. Чтобы устранить проблему, необходимо добавить в цепочку 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 | Отдел документации |