nixp.ru v3.0

20 октября 2017,
пятница,
21:00:48 MSK

DevOps с компанией «Флант»
dao написал 10 февраля 2006 года в 13:18 (1209 просмотров) Ведет себя неопределенно; открыл 1 тему в форуме, оставил 6 комментариев на сайте.

Тестирую скрипт, приведенный в туториале. Возникает вопрос. при обращении из интернета на 25 порт идет перенаправление трафика в ДМЗ . Однако если обратиться из локалки -> не идет коннект с ДМЗ. В документации есть правило на SNAT / Пробовал — тоже не идет.

Как сделать правильно?

PS умеющих посылать в FAQ просьба не беспокоиться.

fly4life

Гм. Правила-то у тебя какие? А схема сети?

Нда.. и как после таких вопросов не посылать в FAQ? Например, сюда:

http://ln.com.ua/~openxs/articles/smart-questions-ru.html

dao

Спасибо.

Схема

Internet

|

|

Firewall — DMZ (mail,ftp,dns)

|

|

ЛВС

Проблема: при обращении из ЛВС по 25 порту — должно обращаться к почтовому серверу в ДМЗ

Скрипт:

dao

#!/bin/sh

#

#

# 1.1 Internet Configuration.

#

INET_IP=«194.236.50.152»

HTTP_IP=«194.236.50.153»

DNS_IP=«194.236.50.154»

INET_IFACE=«eth0»

#

# 1.2 Local Area Network configuration.

#

LAN_IP=«192.168.0.1»

LAN_IFACE=«eth1»

#

# 1.3 DMZ Configuration.

#

DMZ_HTTP_IP=«192.168.1.2»

DMZ_DNS_IP=«192.168.1.3»

DMZ_IP=«192.168.1.1»

DMZ_IFACE=«eth2»

#

# 1.4 Localhost Configuration.

#

LO_IFACE=«lo»

LO_IP=«127.0.0.1»

#

# 1.5 IPTables Configuration.

#

IPTABLES=«/usr/sbin/iptables»

#

# 1.6 Other Configuration.

#

###########################################################################

#

# 2. Module loading.

#

#

# Needed to initially load modules

#

/sbin/depmod -a

#

# 2.1 Required modules

#

/sbin/modprobe ip_tables

/sbin/modprobe ip_conntrack

/sbin/modprobe iptable_filter

/sbin/modprobe iptable_mangle

/sbin/modprobe iptable_nat

/sbin/modprobe ipt_LOG

/sbin/modprobe ipt_limit

/sbin/modprobe ipt_state

echo «1» > /proc/sys/net/ipv4/ip_forward

$IPTABLES -P INPUT DROP

$IPTABLES -P OUTPUT DROP

$IPTABLES -P FORWARD DROP

$IPTABLES -N allowed

$IPTABLES -N icmp_packets

$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \

-m state --state NEW -j REJECT --reject-with tcp-reset

$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \

--log-prefix «New not syn:»

$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

#

# allowed chain

#

$IPTABLES -A allowed -p TCP --syn -j ACCEPT

$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A allowed -p TCP -j DROP

#

# ICMP rules

#

# Changed rules totally

$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT

$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

#

# 4.1.4 INPUT chain

# Bad TCP packets we don’t want

#

$IPTABLES -A INPUT -p tcp -j bad_tcp_packets

#

# Packets from the Internet to this box

#

$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

#

# Packets from LAN, DMZ or LOCALHOST

#

#

# From DMZ Interface to DMZ firewall IP

#

$IPTABLES -A INPUT -p ALL -i $DMZ_IFACE -d $DMZ_IP -j ACCEPT

#

# From LAN Interface to LAN firewall IP

#

$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_IP -j ACCEPT

#

# From Localhost interface to Localhost IP’s

#

$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT

$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT

$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT

#

# Special rule for DHCP requests from LAN, which are not caught properly

# otherwise.

#

$IPTABLES -A INPUT -p UDP -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT

#

# All established and related packets incoming from the internet to the

# firewall

#

$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED \

-j ACCEPT

$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \

--log-level DEBUG --log-prefix «IPT INPUT packet died: »

#

# 4.1.5 FORWARD chain

#

$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets

#

# DMZ section

#

# General rules

#

$IPTABLES -A FORWARD -i $DMZ_IFACE -o $INET_IFACE -j ACCEPT

$IPTABLES -A FORWARD -i $INET_IFACE -o $DMZ_IFACE -m state \

--state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A FORWARD -i $LAN_IFACE -o $DMZ_IFACE -j ACCEPT

$IPTABLES -A FORWARD -i $DMZ_IFACE -o $LAN_IFACE -m state \

--state ESTABLISHED,RELATED -j ACCEPT

#

# HTTP server

#

$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP \

--dport 80 -j allowed

$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP \

-j icmp_packets

#

# DNS server

#

$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP \

--dport 53 -j allowed

$IPTABLES -A FORWARD -p UDP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP \

--dport 53 -j ACCEPT

$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP \

-j icmp_packets

#

# LAN section

$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT

$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Log weird packets that don’t match the above.

#

$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG \

--log-level DEBUG --log-prefix «IPT FORWARD packet died: »

#

# 4.1.6 OUTPUT chain

#

#

# Bad TCP packets we don’t want.

#

$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets

#

# Special OUTPUT rules to decide which IP’s to allow.

#

$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT

$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT

$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT

#

# Log weird packets that don’t match the above.

#

$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \

--log-level DEBUG --log-prefix «IPT OUTPUT packet died: »

# 4.2.4 PREROUTING chain

#

$IPTABLES -t nat -A PREROUTING -p TCP -i $INET_IFACE -d $HTTP_IP --dport 80 \

-j DNAT --to-destination $DMZ_HTTP_IP

$IPTABLES -t nat -A PREROUTING -p TCP -i $INET_IFACE -d $DNS_IP --dport 53 \

-j DNAT --to-destination $DMZ_DNS_IP

$IPTABLES -t nat -A PREROUTING -p UDP -i $INET_IFACE -d $DNS_IP --dport 53 \

-j DNAT --to-destination $DMZ_DNS_IP

#

# 4.2.5 POSTROUTING chain

#

#

# Enable simple IP Forwarding and Network Address Translation

#

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP

Genie

несколько неправильно обрабатывается из-за того, что пакетывыходят не на тот интерфейс. потому как адреса, которые перенаправляются к DMZ, находятся на интерфейсе «Internet», и потому пакеты идут не туда.

таким образом, необходимо изменять маршрутизацию (адреса назначения) до того, как будет прнято решение об отправке пакета в тот или иной интерфейс.

либо дополнитльно импользовать измененеие маршрута действием -j ROUTE

Genie
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP \

--dport 80 -j allowed

$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP \

-j icmp_packets

хорошо, это есть. с внешнего интерфейса.

а для локального где подобное?

dao

# Generated by iptables-save v1.3.4 on Thu Feb 16 19:30:50 2006

*nat

:PREROUTING ACCEPT [198:19394]

:POSTROUTING ACCEPT [78:4452]

:OUTPUT ACCEPT [50:3102]

-A PREROUTING -d 10.1.0.4 -i eth1 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.1.2

-A PREROUTING -d 64.20.30.10 -i eth2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.2

-A PREROUTING -d 64.20.30.10 -i eth2 -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.1.2

-A PREROUTING -d 64.20.30.10 -i eth2 -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.1.2

-A PREROUTING -d 64.20.30.10 -i eth2 -p tcp -m tcp --dport 20 -j DNAT --to-destination 192.168.1.2

-A PREROUTING -d 64.20.30.10 -i eth2 -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.1.2

-A PREROUTING -d 64.20.30.10 -i eth2 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.1.2

-A POSTROUTING -o eth1 -j SNAT --to-source 10.1.0.4

-A POSTROUTING -o eth2 -j SNAT --to-source 64.20.30.10

COMMIT

# Completed on Thu Feb 16 19:30:50 2006

# Generated by iptables-save v1.3.4 on Thu Feb 16 19:30:50 2006

*mangle

:PREROUTING ACCEPT [16796:1470835]

:INPUT ACCEPT [16277:1346940]

:FORWARD ACCEPT [491:119465]

:OUTPUT ACCEPT [12427:3933192]

:POSTROUTING ACCEPT [12823:4002036]

COMMIT

# Completed on Thu Feb 16 19:30:50 2006

# Generated by iptables-save v1.3.4 on Thu Feb 16 19:30:50 2006

*filter

:INPUT DROP [0:0]

:FORWARD DROP [0:0]

:OUTPUT DROP [0:0]

:allowed — [0:0]

:bad_tcp_packets — [0:0]

:icmp_packets — [0:0]

-A INPUT -p tcp -j bad_tcp_packets

-A INPUT -i eth2 -p icmp -j icmp_packets

-A INPUT -d 192.168.1.1 -i eth0 -j ACCEPT

-A INPUT -d 10.1.0.4 -i eth1 -j ACCEPT

-A INPUT -s 127.0.0.1 -i lo -j ACCEPT

-A INPUT -s 10.1.0.4 -i lo -j ACCEPT

-A INPUT -s 64.20.30.10 -i lo -j ACCEPT

-A INPUT -s 192.168.1.1 -i lo -j ACCEPT

-A INPUT -d 10.1.0.4 -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -d 64.20.30.10 -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -m limit --limit 3/min --limit-burst 3 -j LOG --log-prefix «IPT INPUT packet died: » --log-level 7

-A FORWARD -p tcp -j bad_tcp_packets

-A FORWARD -i eth0 -o eth2 -j ACCEPT

-A FORWARD -i eth2 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i eth0 -o eth1 -j ACCEPT

-A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i eth0 -o lo -j ACCEPT

-A FORWARD -i lo -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -d 192.168.1.1 -i lo -o eth0 -p tcp -m tcp --dport 22 -j allowed

-A FORWARD -d 192.168.1.1 -i lo -o eth0 -p icmp -j icmp_packets

-A FORWARD -d 192.168.1.2 -i eth2 -o eth0 -p tcp -m tcp --dport 80 -j allowed

-A FORWARD -d 192.168.1.2 -i eth2 -o eth0 -p icmp -j icmp_packets

-A FORWARD -d 192.168.1.2 -i eth2 -o eth0 -p tcp -m tcp --dport 20 -j allowed

-A FORWARD -d 192.168.1.2 -i eth2 -o eth0 -p tcp -m tcp --dport 21 -j allowed

-A FORWARD -i eth1 -j ACCEPT

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i eth0 -j ACCEPT

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -d 192.168.1.2 -i eth1 -o eth0 -p tcp -m tcp --dport 25 -j allowed

-A FORWARD -d 192.168.1.2 -i eth2 -o eth0 -p tcp -m tcp --dport 25 -j allowed

-A FORWARD -d 192.168.1.2 -i eth2 -o eth0 -p tcp -m tcp --dport 53 -j allowed

-A FORWARD -d 192.168.1.2 -i eth2 -o eth0 -p udp -m udp --dport 53 -j ACCEPT

-A FORWARD -d 192.168.1.2 -i eth2 -o eth0 -p icmp -j icmp_packets

-A FORWARD -m limit --limit 3/min --limit-burst 3 -j LOG --log-prefix «IPT FORWARD packet died: » --log-level 7

-A OUTPUT -p tcp -j bad_tcp_packets

-A OUTPUT -s 127.0.0.1 -j ACCEPT

-A OUTPUT -s 10.1.0.4 -j ACCEPT

-A OUTPUT -s 64.20.30.10 -j ACCEPT

-A OUTPUT -s 192.168.1.1 -j ACCEPT

-A OUTPUT -m limit --limit 3/min --limit-burst 3 -j LOG --log-prefix «IPT OUTPUT packet died: » --log-level 7

-A allowed -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT

-A allowed -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

-A allowed -p tcp -j DROP

-A bad_tcp_packets -p tcp -m tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset

-A bad_tcp_packets -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix «New not syn:»

-A bad_tcp_packets -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP

-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT

-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

COMMIT

# Completed on Thu Feb 16 19:30:50 2006

dao

Chain INPUT (policy DROP 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

220 17248 bad_tcp_packets tcp — * * 0.0.0.0/0 0.0.0.0/0

0 0 icmp_packets icmp — eth2 * 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT all — eth0 * 0.0.0.0/0 192.168.1.1

220 17248 ACCEPT all — eth1 * 0.0.0.0/0 10.1.0.4

0 0 ACCEPT all — lo * 127.0.0.1 0.0.0.0/0

0 0 ACCEPT all — lo * 10.1.0.4 0.0.0.0/0

0 0 ACCEPT all — lo * 64.20.30.10 0.0.0.0/0

0 0 ACCEPT all — lo * 192.168.1.1 0.0.0.0/0

0 0 ACCEPT all — * * 0.0.0.0/0 10.1.0.4 state RELATED,ESTABLISHED

0 0 ACCEPT all — * * 0.0.0.0/0 64.20.30.10 state RELATED,ESTABLISHED

0 0 LOG all — * * 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 3 LOG flags 0 level 7 prefix `IPT INPUT packet died: '

Chain FORWARD (policy DROP 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

3 180 bad_tcp_packets tcp — * * 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT all — eth0 eth2 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT all — eth2 eth0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

0 0 ACCEPT all — eth0 eth1 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT all — eth1 eth0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

0 0 ACCEPT all — eth0 lo 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT all — lo eth0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

0 0 allowed tcp — lo eth0 0.0.0.0/0 192.168.1.1 tcp dpt:22

0 0 icmp_packets icmp — lo eth0 0.0.0.0/0 192.168.1.1

0 0 allowed tcp — eth2 eth0 0.0.0.0/0 192.168.1.2 tcp dpt:80

0 0 icmp_packets icmp — eth2 eth0 0.0.0.0/0 192.168.1.2

0 0 allowed tcp — eth2 eth0 0.0.0.0/0 192.168.1.2 tcp dpt:20

0 0 allowed tcp — eth2 eth0 0.0.0.0/0 192.168.1.2 tcp dpt:21

3 180 ACCEPT all — eth1 * 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

0 0 ACCEPT all — eth0 * 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

0 0 allowed tcp — eth1 eth0 0.0.0.0/0 192.168.1.2 tcp dpt:25

0 0 allowed tcp — eth2 eth0 0.0.0.0/0 192.168.1.2 tcp dpt:25

0 0 allowed tcp — eth2 eth0 0.0.0.0/0 192.168.1.2 tcp dpt:53

0 0 ACCEPT udp — eth2 eth0 0.0.0.0/0 192.168.1.2 udp dpt:53

0 0 icmp_packets icmp — eth2 eth0 0.0.0.0/0 192.168.1.2

0 0 LOG all — * * 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 3 LOG flags 0 level 7 prefix `IPT FORWARD packet died: '

Chain OUTPUT (policy DROP 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

133 15476 bad_tcp_packets tcp — * * 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT all — * * 127.0.0.1 0.0.0.0/0

133 15476 ACCEPT all — * * 10.1.0.4 0.0.0.0/0

0 0 ACCEPT all — * * 64.20.30.10 0.0.0.0/0

0 0 ACCEPT all — * * 192.168.1.1 0.0.0.0/0

0 0 LOG all — * * 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 3 LOG flags 0 level 7 prefix `IPT OUTPUT packet died: '

Chain allowed (7 references)

pkts bytes target prot opt in out source destination

0 0 ACCEPT tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0×17/0×02

0 0 ACCEPT tcp — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0

Chain bad_tcp_packets (3 references)

pkts bytes target prot opt in out source destination

0 0 REJECT tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0×12/0×12 state NEW reject-with tcp-reset

0 0 LOG tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0×17/0×02 state NEW LOG flags 0 level 4 prefix `New not syn:'

0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0×17/0×02 state NEW

Chain icmp_packets (4 references)

pkts bytes target prot opt in out source destination

0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmp type 8

0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmp type 11

dao

Chain PREROUTING (policy ACCEPT 198 packets, 19394 bytes)

pkts bytes target prot opt in out source destination

1 60 DNAT tcp — eth1 * 0.0.0.0/0 10.1.0.4 tcp dpt:25 to:192.168.1.2

0 0 DNAT tcp — eth2 * 0.0.0.0/0 64.20.30.10 tcp dpt:80 to:192.168.1.2

0 0 DNAT tcp — eth2 * 0.0.0.0/0 64.20.30.10 tcp dpt:53 to:192.168.1.2

0 0 DNAT udp — eth2 * 0.0.0.0/0 64.20.30.10 udp dpt:53 to:192.168.1.2

0 0 DNAT tcp — eth2 * 0.0.0.0/0 64.20.30.10 tcp dpt:20 to:192.168.1.2

0 0 DNAT tcp — eth2 * 0.0.0.0/0 64.20.30.10 tcp dpt:21 to:192.168.1.2

0 0 DNAT tcp — eth2 * 0.0.0.0/0 64.20.30.10 tcp dpt:25 to:192.168.1.2

Chain POSTROUTING (policy ACCEPT 79 packets, 4512 bytes)

pkts bytes target prot opt in out source destination

0 0 SNAT all — * eth1 0.0.0.0/0 0.0.0.0/0 to:10.1.0.4

0 0 SNAT all — * eth2 0.0.0.0/0 0.0.0.0/0 to:64.20.30.10

Chain OUTPUT (policy ACCEPT 50 packets, 3102 bytes)

pkts bytes target prot opt in out source destination

dao

из локальной сети интернет есть. схема инет -> DMZ работает. не работает — LAN<-> DMZ

Genie

итак, что имеем?

есть некоторый внешние ip-адреса, которые, проходя через маршрутизатор, маскируются в серые адреса DMZ

есть локальная сеть, для которой доступ настроен до интернета.

все работает, кроме того, что при обращении из локальной сети к выделенным внешним ip-адресам, для которых проиводится маскирование, нет доступа.

(но при этом, если обращаться по серым ip-адресам, доступ вроде бы как должен быть и должно работать).

итого: не настроено маскирование проходящего трафика через шлюз.

есть 2 варианта решения:

1) настроить правильно файрволл.

2) настроить правильно views на dns-сервере (который, я так подозреваю и есть шлюз) и указать там для внешних клиентов — внешние адреса серверов, а для локальных клиентов — соответственно напрямую доступные им локальные адреса.