Помогите разобраться с доступом из локальной сети на ресурс находящийся в той же локальной сети через маршрутизатор.
Схема сети такая:
- локальная сеть 192.168.1.0/24 в ней станция-клиент 192.168.1.50
- маршрутизатор с тремя сетевыми интерфейсами etho - локальная сеть, eth1 - первый провайдер, eth2 - второй провайдер
- у внешних интерфейсов (eth1, eth2) по три реальных ip-адреса eth1: 172.16.1.1, 172.16.1.2, 172.16.1.3; eth2: 172.16.2.1, 172.16.2.2, 172.16.2.3
- у внутреннего интерфейса адрес 192.168.1.254
- шлюз первого провайдера 172.16.1.10
- шлюз второго провайдера 172.16.2.10
- вебсервер, внутри локальной сети 192.168.1.51
Маршрутизация настроена так (согласно http://www.opennet.me/docs/RUS/LARTC/x348.html):
#ip rule
0: from all lookup local
32753: from all fwmark 0x67 lookup ISP1
32754: from all fwmark 0x66 lookup ISP1
32755: from all fwmark 0x65 lookup ISP1
32756: from 172.16.1.1 lookup ISP1
32762: from all fwmark 0xcb lookup ISP2
32763: from all fwmark 0xca lookup ISP2
32764: from all fwmark 0xc9 lookup ISP2
32765: from 172.16.2.1 lookup ISP2
32766: from all lookup main
32767: from all lookup default
# ip route list table ISP1
172.16.1.0/25 dev eth2 scope link
192.168.1.0/24 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via 172.16.1.10 dev eth1
# ip route list table ISP2
172.16.2.0/25 dev eth1 scope link
192.168.1.0/24 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via 172.16.2.10 dev eth2
# ip route list table main
172.16.1.0/25 dev eth1 proto kernel scope link 172.16.1.1
172.16.2.0/25 dev eth2 proto kernel scope link 172.16.2.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.254
default via 172.16.1.10 dev eth1 metric 100# iptables-save
*raw
:PREROUTING ACCEPT [2322:296381]
:OUTPUT ACCEPT [1692:290926]
COMMIT
*mangle
:PREROUTING ACCEPT [2322:296381]
:INPUT ACCEPT [2131:226028]
:FORWARD ACCEPT [179:69081]
:OUTPUT ACCEPT [1692:290926]
:POSTROUTING ACCEPT [1871:360007]
-A PREROUTING -s 192.168.1.50/32 ! -d 192.168.1.0/24 -i eth0 -m mac --mac-source xx:xx:xx:xx:xx:xx -j MARK --set-xmark 0x66/0xffffffff
COMMIT
*nat
:PREROUTING ACCEPT [481:40651]
:POSTROUTING ACCEPT [127:8536]
:OUTPUT ACCEPT [124:8392]
-A PREROUTING -d 172.16.1.3/32 -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.51:80
-A PREROUTING -d 172.16.2.3/32 -i eth2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.51:80
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -m mark --mark 0x65 -m comment --comment "WAN1IP1" -j SNAT --to-source 172.16.1.1
-A POSTROUTING -s 192.168.1.0/24 -o eth2 -m mark --mark 0xc9 -m comment --comment "WAN2IP1" -j SNAT --to-source 172.16.2.1
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -m mark --mark 0x66 -m comment --comment "WAN1IP2" -j SNAT --to-source 172.16.1.2
-A POSTROUTING -s 192.168.1.0/24 -o eth2 -m mark --mark 0xca -m comment --comment "WAN2IP2" -j SNAT --to-source 172.16.2.2
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -m mark --mark 0x67 -m comment --comment "WAN1IP3" -j SNAT --to-source 172.16.1.3
-A POSTROUTING -s 192.168.1.0/24 -o eth2 -m mark --mark 0xcb -m comment --comment "WAN2IP3" -j SNAT --to-source 172.16.2.3
-A POSTROUTING -s 192.168.1.51/32 -o eth1 -p tcp -m tcp --sport 80 -j SNAT --to-source 172.16.1.3
-A POSTROUTING -s 192.168.1.51/32 -o eth2 -p tcp -m tcp --sport 80 -j SNAT --to-source 172.16.2.3
COMMIT
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2:1304]
COMMITВ результате, из локальной сети в интернет доступ есть (192.168.1.50 -> интернет)
Из интернета на "внутренний" вебсервер доступ тоже есть (интернет -> 172.16.1.3 -> 192.168.1.51 и интернет -> 172.16.2.3 -> 192.168.1.51)
но если из внутренний сети обратиться на 172.16.1.3 или 172.16.2.3, то есть попытаться получить доступ от 192.168.1.50 к 192.168.1.51 через 172.16.1.3 или 172.16.2.3 то не работает
tcpdump показывает трафик от 192.168.1.50 к 172.16.1.3 или 172.16.2.3 и обратно, а трафика к 192.168.1.51 при этом нет
>[оверквотинг удален]
>:OUTPUT ACCEPT [2:1304]
>COMMIT
>
>В результате, из локальной сети в интернет доступ есть (192.168.1.50 -> интернет)
>Из интернета на "внутренний" вебсервер доступ тоже есть (интернет -> 172.16.1.3 -> 192.168.1.51 и интернет -> 172.16.2.3 -> 192.168.1.51)
>но если из внутренний сети обратиться на 172.16.1.3 или 172.16.2.3, то есть
>попытаться получить доступ от 192.168.1.50 к 192.168.1.51 через 172.16.1.3 или 172.16.2.3
>то не работает
>tcpdump показывает трафик от 192.168.1.50 к 172.16.1.3 или 172.16.2.3 и обратно, а
>трафика к 192.168.1.51 при этом нетили вебсервер в другую подсеть или SNAT на 192.168.1.254
http://www.opennet.me/docs/RUS/iptables/#DNATTARGET
http://www.opennet.me/openforum/vsluhforumID1/89679.html#6
>[оверквотинг удален]
>>но если из внутренний сети обратиться на 172.16.1.3 или 172.16.2.3, то есть
>>попытаться получить доступ от 192.168.1.50 к 192.168.1.51 через 172.16.1.3 или 172.16.2.3
>>то не работает
>>tcpdump показывает трафик от 192.168.1.50 к 172.16.1.3 или 172.16.2.3 и обратно, а
>>трафика к 192.168.1.51 при этом нет
>
>или вебсервер в другую подсеть или SNAT на 192.168.1.254
>
>http://www.opennet.me/docs/RUS/iptables/#DNATTARGET
>http://www.opennet.me/openforum/vsluhforumID1/89679.html#6спасибо за напоминание о доп. правилах DNAT, совсем забыл про них
но вопрос решился не добавлением
-j SNAT --to-source _внутр_IP_сервера
доступ из локальной сети по реальному адресу внутреннего ресурса заработал при трех правилах (учитываем что -P FORWARD ACCEPT)
$iptables -v -t nat -A PREROUTING -i $WAN1IF -p tcp -m tcp --sport $UNPRIVPORTS -d $WEB3EXTISP1 -m multiport --dports 80,443 -j DNAT --to-destination $WEB3INT
$iptables -v -t nat -A PREROUTING -i $LAN1IF -p tcp -m tcp --sport $UNPRIVPORTS -d $WEB3EXTISP1 -m multiport --dports 80,443 -j DNAT --to-destination $WEB3INT
$iptables -v -t nat -A POSTROUTING -o $LAN1IF -p tcp -m tcp --sport $UNPRIVPORTS -d $WEB3INT -m multiport --dports 80,443 -j SNAT --to-source $WEB3EXTISP1
где WAN1IF внеш. интерфейс роутера, LAN1IF внутр. интерфейс роутера
WEB3EXTISP1 "реальный" адрес для вебсервера, WEB3INT - его "серый" ip адреспричем для доступа из интернета к локальному вебсерверу достаточно только первой строчки,
сам проверял, как работает не совсем понимаю, для WEB3INT SNAT-а нет
но есть одна проблема!
если канала два, то при двух таких наборах правил, внутренний веб-сервер
всегда думает что к нему обращается с $WEB3EXTISP1
(если поменять наборы местами, то будет $WEB3EXTISP2)>[оверквотинг удален]
>--to-destination $WEB3INT
>$iptables -v -t nat -A POSTROUTING -o $LAN1IF -p tcp -m tcp
>--sport $UNPRIVPORTS -d $WEB3INT -m multiport --dports 80,443 -j SNAT --to-source
>$WEB3EXTISP1
>где WAN1IF внеш. интерфейс роутера, LAN1IF внутр. интерфейс роутера
>WEB3EXTISP1 "реальный" адрес для вебсервера, WEB3INT - его "серый" ip адрес
>
>причем для доступа из интернета к локальному вебсерверу достаточно только первой строчки,
>
>сам проверял, как работает не совсем понимаю, для WEB3INT SNAT-а нет
в результате получилось так
iptables -t nat -A PREROUTING -i $WAN1IF -p tcp -m tcp --sport $UNPRIVPORTS -d $WEB3EXTISP1 -m multiport --dports 80,443 -j DNAT --to-destination $WEB3INT
iptables -t nat -A PREROUTING -i $WAN2IF -p tcp -m tcp --sport $UNPRIVPORTS -d $WEB3EXTISP2 -m multiport --dports 80,443 -j DNAT --to-destination $WEB3INT
iptables -t nat -A PREROUTING -i $LAN1IF -p tcp -m tcp --sport $UNPRIVPORTS -d $WEB3EXTISP1 -m multiport --dports 80,443 -j DNAT --to-destination $WEB3INT
iptables -t nat -A PREROUTING -i $LAN1IF -p tcp -m tcp --sport $UNPRIVPORTS -d $WEB3EXTISP2 -m multiport --dports 80,443 -j DNAT --to-destination $WEB3INT
iptables -t nat -A POSTROUTING -o $LAN1IF -p tcp -m tcp -s $LAN1NET --sport $UNPRIVPORTS -d $WEB3INT -m multiport --dports 80,443 -j SNAT --to-source $LAN1IP1
>[оверквотинг удален]
>>--to-destination $WEB3INT
>>$iptables -v -t nat -A POSTROUTING -o $LAN1IF -p tcp -m tcp
>>--sport $UNPRIVPORTS -d $WEB3INT -m multiport --dports 80,443 -j SNAT --to-source
>>$WEB3EXTISP1
>>где WAN1IF внеш. интерфейс роутера, LAN1IF внутр. интерфейс роутера
>>WEB3EXTISP1 "реальный" адрес для вебсервера, WEB3INT - его "серый" ip адрес
>>
>>причем для доступа из интернета к локальному вебсерверу достаточно только первой строчки,
>>
>>сам проверял, как работает не совсем понимаю, для WEB3INT SNAT-а нет
если на web сервере шлюзом прописан 192.168.1.254, то snat для пакетов идущих из инета не нужен, там маршрутизация отработает.
snat нужен для правильного хождения ответных пакетов когда обращение происходит из локалки к web серверу , который находится в этой же подсети, через внешний ip. соответственно если web сервер вынести в другую подсеть, то snat можно вообще убрать.а можно было бы сделать чтобы dns сервер для локалки отдавал ip 192.168.1.51, а не внешние и не грузить маршрутизатор
но web сервер в общей локалке это не безопасно :) , поэтому в DMZ его
>если на web сервере шлюзом прописан 192.168.1.254, то snat для пакетов идущих
>из инета не нужен, там маршрутизация отработает.
>snat нужен для правильного хождения ответных пакетов когда обращение происходит из локалки
>к web серверу , который находится в этой же подсети, через
>внешний ip. соответственно если web сервер вынести в другую подсеть, то
>snat можно вообще убрать.спасибо, понял
>а можно было бы сделать чтобы dns сервер для локалки отдавал ip
>192.168.1.51, а не внешние и не грузить маршрутизатортак и будет сделано, но если раз в год понадобиться обратится по ip-адресу, хочется, что бы все работало и различное поведение не вводило в заблуждения.
>попытаться получить доступ от 192.168.1.50 к 192.168.1.51 через 172.16.1.3 или 172.16.2.3
>то не работает192.168.1.50 к 192.168.1.51 в одной подсети, зачем им общаться через шлюзы? Они могут напрямую.
Покажите ip route list на хостах 192.168.1.50 и 192.168.1.51.
>>попытаться получить доступ от 192.168.1.50 к 192.168.1.51 через 172.16.1.3 или 172.16.2.3
>>то не работает
>
> 192.168.1.50 к 192.168.1.51 в одной подсети, зачем им общаться через шлюзы?
>Они могут напрямбез шлюзов могут работать только 2 компьютера, которые подключены бкз помощи хаба
>>>попытаться получить доступ от 192.168.1.50 к 192.168.1.51 через 172.16.1.3 или 172.16.2.3
>>>то не работает
>>
>> 192.168.1.50 к 192.168.1.51 в одной подсети, зачем им общаться через шлюзы?
>>Они могут напрям
>
>без шлюзов могут работать только 2 компьютера, которые подключены бкз помощи
>хабаа если 2 компа в одной IP-подсети, но в разных физических Ethernet-доменах, то общаться друг с другом они не смогут.
>без шлюзов могут работать только 2 компьютера, которые подключены бкз помощи
>хабаЭто я не понял. У нас обычно компьютеры включаются в концентратор/коммутатор, имеют адреса из одной сети и нормально работают.
Ну тогда поменяйте адрес одного из компьюторов на адрес из другой сети. И шлюзу назначьте адрес из новой сети.