В RouterOS есть IPSec-policy matcher, который проверяет, попадает ли пакет под какую-то активную политику IPSec. В 6.47 (возможно, и раньше) его, похоже, поломали:
вот в это правило (когда оно первое в цепочке) попадает весь входящий трафик без разбору, даже если никаких ipsec политик не определено. Хотя не должно же, вроде? ipsec-policy=in,ipsec работает как описано (и как ожидается). Кто-то может проверить/подтвердить?
ipsec - matches if the packet is subject to IpSec processing;
none - matches packet that is not subject to IpSec processing (for example, IpSec transport packet).
Т.е. в none попадает либо тот трафик, который не участвует в шифровании, либо тот, внутри которого зашифрованы пакеты. А сами зашифрованные пакеты уже идут как ipsec.
По документации, я понял, что ipsec должен матчить уже расшифрованный трафик (тот, что внутри AH и ESP), соответствующий настроенным ipsec-policy - и это так и работает. А none должен матчить шифрованный, но именно ipsec трафик, сответствующий политикам, а не весь - т.е. AH, ESP пакеты.
Почему спрашиваю: если none матчит таки весь трафик, то какой смысл вложен в none - ведь он просто ничего не делает? Есть ли хоть один реальный кейс, когда использование none необходимо и без него просто никак?
Так ведь none - это отрицание ipsec, по сути. Т.е. чтобы маскарадить только трафик, который гуляет в Интернете - надо использовать /ip firewall nat add chain=srcnat action=masquerade ipsec-policy=out,none, чтобы маскарад не задевал трафик внутри тоннеля IPSec.