Не часто, зато регулярно приходится иметь дело со всякими умными железками. Причем решаемые задачи от хрестоматийно простых, до "этого сделать нельзя, но очень надо". Так и в этот раз, после двух- или трехлетнего перерыва нужно сделать конфиг для Juniper SRX-100 (версия "B", который с маленькой памятью). Задача осложнена тем, что нужно заранее сделать и быстро-быстро переставить (больница, режим работы круглосуточный простои крайне не желательны). Нужно делать стенд и отлаживать. Ресурсов для деланья оного стенда нет, можно сгородить только половину от желаемого. С созданием source-nat проблем никаких. В результате имеем подключенный к внутренней сети девайс, который можно использовать в качестве дефолтового шлюза (один из интерфейсов вытолкнули наружу, правда через "лишний чужой" NAT). Прописали его на одном компе и погоняли. Все гладко. Надо настроить destination-nat, там полтора десятка разных пробросов, их, собственно и хочется погонять. Условием работы desination nat является использование того-же устройства в качестве default gateway (пакеты приходят с мира, имея настоящий обратный адрес, на который и уходят ответы сервера). Поскольку все те сервисы, которые надобно отладить, используют совершенно другой ip в качестве дефолта, отладка остановилась. Единственный выход - сделать доп. трансляцию адресов с тем, чтоб source-address в пакете был заменен на адрес интерфейса маршрутизатора. Вот этот конфиг, вернее его кусочки и приведем. На самом деле все оказалось не просто, а очень просто.
Раздел system, тут ничего интересного, приведен полностью на всякий случай.
version 11.2R4.3;
system {
host-name gw1;
time-zone Asia/Bangkok;
root-authentication {
encrypted-password "онтутбыл"; ## SECRET-DATA
}
name-server {
208.67.222.222;
208.67.220.220;
8.8.8.8;
77.88.8.8;
}
services {
ssh;
web-management {
http {
interface vlan.0;
}
https {
system-generated-certificate;
interface vlan.0;
}
}
}
syslog {
archive size 100k files 3;
user * {
any emergency;
}
file messages {
any critical;
authorization info;
}
file interactive-commands {
interactive-commands error;
}
}
max-configurations-on-flash 5;
max-configuration-rollbacks 5;
license {
autoupdate {
url https://ae1.juniper.net/junos/key_retrieval;
}
}
ntp {
peer 10.0.0.3;
}
}
Интерфейсы, даже вычистим серединку для экономии места. Пока стоит один внешний, все остальное в switching.
interfaces {
fe-0/0/0 {
unit 0 {
family inet {
address 91.201.11.82/29;
}
}
}
fe-0/0/1 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
....
fe-0/0/7 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
lo0 {
unit 0 {
family inet {
filter {
input deny-ssh;
}
}
}
}
vlan {
unit 0 {
family inet {
address 10.0.0.26/23;
}
}
}
Роутинг и пр. Так же на всякий случай
}
snmp {
community public {
authorization read-only;
}
}
routing-options {
static {
route 0.0.0.0/0 next-hop 91.201.11.81;
}
}
protocols {
stp;
}
Адресную книгу и правила firewall приводить нет смысла. А вот и собственно NAT.
nat {
source {
rule-set trust-to-untrust {
from zone trust;
to zone untrust;
rule source-nat-rule {
match {
source-address 0.0.0.0/0;
}
then {
source-nat {
interface;
}
}
}
}
rule-set untrust-to-trust {
from zone untrust;
to zone trust;
rule source-rule {
match {
source-address 0.0.0.0/0;
}
then {
source-nat {
interface;
}
}
}
}
}
destination {
pool d-rdp2 {
address 10.0.0.2/32 port 3389;
}
rule-set D-NAT {
from zone untrust;
rule rdp2 {
match {
destination-address 91.201.11.82/32;
destination-port 3390;
}
then {
destination-nat pool d-rdp2;
}
}
}
}
}
policies {
from-zone trust to-zone untrust {
policy trust-to-untrust {
match {
source-address any;
destination-address any;
application any;
}
then {
permit;
}
}
}
from-zone untrust to-zone trust {
policy local2-acc {
match {
source-address any;
destination-address local2;
application any;
}
then {
permit;
}
}
}
}
zones {
security-zone trust {
host-inbound-traffic {
system-services {
all;
}
protocols {
all;
}
}
interfaces {
vlan.0;
}
}
security-zone untrust {
interfaces {
fe-0/0/0.0 {
host-inbound-traffic {
system-services {
ping;
ssh;
}
}
}
}
}
}
}
Розовым цветом выделен "дополнительный NAT", ради которого вся писанина. Никаких дополнительных policy не нужно! Теперь пакеты прошедшие destination NAT, проходят еще и source NAT, и приходят на терминальный сервер с 10.0.0.26 (адрес интерфейса), что позволяет потихоньку проверять устанавливаемые правила пробросов не мешая всему остальному.