Решено: NAT и bridge (что-то не так)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Nilss
Сообщения: 7

Решено: NAT и bridge

Сообщение Nilss »

Есть сеть вот такой конфигурации:

Роутер
eth1 - 10.X.X.X - локальная сеть провайдера
ppp0 - 46.X.X.X - интернет от него. На этот адрес dyndns'ом выдается доменное имя (example.com).
br0 - 192.168.0.100 - наша локальная сеть:
eth0+wlan0

Локальный хост 192.168.0.1, подключен к роутеру через eth0, gateway - 192.168.0.100

Нужно, чтоб хосты из локальной сети при обращении по адресу example.com:8080 попадали на 192.168.0.1:80
По примерам из http://www.opennet.ru/docs/RUS/iptables/#DNATTARGET получилось следующее:

iptables -S -t nat:

Код: Выделить всё

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -s 192.168.0.0/24 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.1:80
-A POSTROUTING -s 192.168.0.0/24 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.100


ip addr:
Spoiler

Код: Выделить всё

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether 38:60:77:55:fe:23 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::3a60:77ff:fe55:fe23/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 1c:7e:e5:1f:e4:0d brd ff:ff:ff:ff:ff:ff
    inet 10.X.X.X/24 brd 10.X.X.255 scope global eth1
    inet6 fe80::1e7e:e5ff:fe1f:e40d/64 scope link
       valid_lft forever preferred_lft forever
4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UNKNOWN qlen 1000
    link/ether b0:48:7a:c3:b2:95 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::b248:7aff:fec3:b295/64 scope link
       valid_lft forever preferred_lft forever
5: mon.wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ieee802.11/radiotap b0:48:7a:c3:b2:95 brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 38:60:77:55:fe:23 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.100/24 brd 192.168.0.255 scope global br0
    inet6 fe80::3a60:77ff:fe55:fe23/64 scope link
       valid_lft forever preferred_lft forever
7: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UNKNOWN qlen 3
    link/ppp
    inet 46.X.X.X peer 94.X.X.X/32 scope global ppp0


ip route list table all:
Spoiler

Код: Выделить всё

default dev ppp0  scope link
10.0.0.0/8 via 10.X.X.X dev eth1
10.X.X.X/24 dev eth1  proto kernel  scope link  src 10.X.X.X
94.X.X.X dev ppp0  proto kernel  scope link  src 46.X.X.X
127.0.0.0/8 dev lo  scope link
192.168.0.0/24 dev br0  proto kernel  scope link  src 192.168.0.100
broadcast 10.X.X.0 dev eth1  table local  proto kernel  scope link  src 10.X.X.X
local 10.X.X.X dev eth1  table local  proto kernel  scope host  src 10.X.X.X
broadcast 10.X.X.255 dev eth1  table local  proto kernel  scope link  src 10.X.X.X
local 46.X.X.X dev ppp0  table local  proto kernel  scope host  src 46.X.X.X
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.0.0 dev br0  table local  proto kernel  scope link  src 192.168.0.100
local 192.168.0.100 dev br0  table local  proto kernel  scope host  src 192.168.0.100
broadcast 192.168.0.255 dev br0  table local  proto kernel  scope link  src 192.168.0.100
local ::1 dev lo  proto kernel  metric 256
unreachable fe80::/64 dev lo  proto kernel  metric 256  error -101
fe80::/64 dev wlan0  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256
fe80::/64 dev eth1  proto kernel  metric 256
fe80::/64 dev br0  proto kernel  metric 256
unreachable default dev lo  table unspec  proto kernel  metric -1  error -101 hoplimit 255
local ::1 via :: dev lo  table local  proto none  metric 0
local fe80::1e7e:e5ff:fe1f:e40d via :: dev lo  table local  proto none  metric 0
local fe80::3a60:77ff:fe55:fe23 via :: dev lo  table local  proto none  metric 0
local fe80::3a60:77ff:fe55:fe23 via :: dev lo  table local  proto none  metric 0
local fe80::b248:7aff:fec3:b295 via :: dev lo  table local  proto none  metric 0
unreachable ff00::/8 dev lo  table local  metric 256  error -101
ff00::/8 dev wlan0  table local  metric 256
ff00::/8 dev eth0  table local  metric 256
ff00::/8 dev eth1  table local  metric 256
ff00::/8 dev br0  table local  metric 256
unreachable default dev lo  table unspec  proto kernel  metric -1  error -101 hoplimit 255


С хостов, подключающихся через wlan0, все работает. С самого 192.168.0.1 - вечное ожидание ответа. Для него удалось оттрассировать только это:

Код: Выделить всё

[29476.302883] TRACE: raw:PREROUTING:policy:3 IN=br0 OUT= PHYSIN=eth0 SRC=192.168.0.1 DST=46.X.X.X LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=57581 DF PROTO=TCP SPT=48037 DPT=8080 SEQ=1007216511 ACK=0 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405B40402080A01BD2ABC0000000001030306)
[29476.302940] TRACE: nat:PREROUTING:rule:1 IN=br0 OUT= PHYSIN=eth0 SRC=192.168.0.1 DST=46.X.X.X LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=57581 DF PROTO=TCP SPT=48037 DPT=8080 SEQ=1007216511 ACK=0 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405B40402080A01BD2ABC0000000001030306)


Если отключить мост и дать адрес 192.168.0.100 eth0, то с теми же двумя правилами с 192.168.0.1 внезапно трансляция заработает.
Что не так?

P. S. Я понимаю, что по-хорошему надо бы такие сервера выносить в отдельную DMZ, что проблему можно решить и другими способами - своим DNS, проксирующим веб-сервером или еще как. Но сейчас нужно, чтобы работало описанным способом.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: NAT и bridge

Сообщение sash-kan »

Nilss писал(а):
03.12.2011 04:42
Если отключить мост

Что не так?
вероятно, настройки моста·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Nilss
Сообщения: 7

Re: Решено: NAT и bridge

Сообщение Nilss »

Зря все-таки люди упоминают Капитана Очевидность исключительно с иронией. Казалось бы, ответ sash-kan очевиден, но я упорно ковырялся с iptables - мысли о том, что подобные опции могут ограничиваться настройками моста, как-то не приходили в голову.

Код: Выделить всё

brctl hairpin br0 eth0 on
все решило.
Спасибо!
Спасибо сказали: