Есть маршрутизатор CISCO (IOS 12.4 если это зачем-то важно).
Есть вот такая схема сети (связаны два корпоративных сегмента):сеть2 10.0.2.0/24 - router2 - router1 - cеть1 192.168.1.0/24
При этом между сетями должен ходить трафик, но сеть2 принимает пакеты только от адресов 10.0.0.0/8, допустим. Сделать с этим ничего нельзя (router2 недоступен по управлению).
Соответственно на router1 устраиваем статический NAT и всё прекрасно работает:
Int e1
rem сеть1
Ip addr 192.168.1.1/24
Ip nat insideInt e2
rem к сети2
172.16.0.1/30
Ip nat outsideip route 10.0.2.0 255.255.255.0 e1
ip nat inside source static network 192.168.1.0 10.0.1.0 /24Причем трансляция получается "один в один", сохраняются все номера портов и если пакет ушёл из сети1 от адреса, допустим от 192.168.1.10, то в сети2 он виден как пришедший от 10.0.1.10, то же самое для любого адреса - т.е. все отправители пакетов, пришедших в сеть2, там однозначно идентифицируется (что нужно).
а теперь задача усложняется. кроме подключения к сети2 на router1 появляется подключение допустим, к Интернету (сети3).
сеть3 (интернет)
^
|
сеть2 10.0.2.0/24 - router2 - router1 - cеть1 192.168.1.0/24а в сети1 есть один хост (допустим, 192.168.1.100), который должен как ходить как в сеть 2 по прежней схеме, так и в сеть3 (Интернет). А остальные хосты должны по прежнему ходить в сеть2, но не должны в сеть3.
казалось бы должно сработать что-то вроде:
Int e1
rem сеть1
Ip addr 192.168.1.1/24
Ip nat insideInt e2
rem в сеть2
172.16.0.1/32
Ip nat outsideInt e3
в сеть 3
1.1.1.1/29
ip nat outsideip route 10.0.2.0 255.255.255.0 e1
ip route 0.0.0.0 0.0.0.0 1.1.1.2ip nat inside source static network 192.168.1.0 10.0.1.0 /24
ip nat inside source list 150 int e2 overloadaccess-list 150 rem описывает весь трафик с 192.168.1.100, кроме отправленного в сеть 10.0.2.0 - и этот трафик должен бы попадать в соответствующую запись nat
access-list 150 deny ip host 192.168.1.100 10.0.2.0 0.0.0.255
access-list 150 permit ip ip host 192.168.1.100 anyНо ничего не получается. Трафик от 192.168.1.100, согласно таблицам трансляции и статистике nat, сначала транслируется в трафик от 10.0.1.100, а потом, если отправлен в произвольную сеть, а не на 10.0.2.0, то вообще никуда не попадает.
Понятно, что что-то делаю не так. Но как получить желаемое иначе - придумать не могу.
добавьте в правило nat(ip nat inside source route-map NAT_*) rm вида:route-map NAT_2R2 permit 10
match ip address NAT_10.0.1.0
match interface e2route-map NAT_2Global permit 10
match ip address NAT_150
match interface e3
Cпасибо за наводку. Получилось. По ходу поэкспериментировал, выяснил следующие неочевидные вещи:1. Если есть трансляция вида ip nat inside source static - то ничего не получается. Адрес источника всегда и сразу транслируется из 192.168.1.100 в 10.0.1.100 - независимо от адреса назначения.
2. Если использовать динамическую трансляцию типа source list, создав ACL типа:
ip access list ext NAT_10
permit ip 192.168.1.0 0.0.0.255 10.0.1.0 0.0.0.255
ip access list ext NAT_150
deny ip any 10.0.1.0 0.0.0.255
permit ip host 192.168.1.100 any
то опять не работает, всё то же самое, что с source static3. Если поменять местами записи в ACL NAT_150 (cначала permit источник, потом deny получатель) -
то с 192.168.1.100 всё начинает всегда уходить на интерфейс во внешнюю сеть, даже то, что предназначено в сеть 10.0.2.0.4. Если сделать хотя бы одну запись для трансляции через route-map (вторую можно оставить через list) - то всё работает.
Есть в этом что-то удивительное.