Bohužel, ROS nikdy nedovoloval filtrovat v mangle output. Linux kernel to obecně podporuje(podporoval), ale ROS ne. Takže jen ROS prostředky v /ip firewall v rámci jedné bedny, kde se má filtrovat i NATovat naráz, tak se dá případně zastavit až druhý paket, pokud se na první neuplatní z nějakého důvodu SRCNAT. Způsobů je několik, dneska asi nejjendodušeji (pokud mám jen jeden uplink a provádí se jen srcnaty na moje veřejky, jakmile je linek ven na různé rozsahy víc a srcnat s provádí na různé IP, je třeba složitěji si vypomoci s manglováním):
/ip firewall filter
add action=reject chain=forward connection-nat-state=!srcnat connection-state=!new out-interface=ether-uplink reject-with=icmp-network-unreachable
Takže pro jistotu jediné, co můžeš, tak k tomuto ještě přidat pravidlo, co dovolí new forward ven jen pro tvoje veřejné IP adresy akivní uvnitř sítě a pro src adresy na které se má uplatnit SRCNAT, ostatí drop. Ale i tak občas uteče něco bez NATu nebo se špatným NATem (což někdy dělá problém, pokud uplink shodí linku na první nekorektní paket).
Kde to jde, tak to řeším na prvku před ROS boxem směrem ven, třeba přímo na switchi, kde access pravidly stopnu pakety jdoucí z ROS boxu a nemající správné zdrojové IP adresy (a stejně tak rovnou dropuji i příchozí pakety, kde src adresa je moje nebo dstadresa je něco jiného, než moje veřejky).
A ten switch může být i softwarový, takže pokud si na uplink port pověsíš bridge v kterém bude jen tne jedne uplink ethernet port, tak pak můžeš použít bridge firewall pro stopnutí paketů, co mají blbou zdrojovou ip pod /interface bridge filter.