Роутер
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.100ip 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 ppp0ip 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, проксирующим веб-сервером или еще как. Но сейчас нужно, чтобы работало описанным способом.