LINUX.ORG.RU
решено ФорумAdmin

iptables/iproute2, чем развернуть запросы по URL?


0

1
Здравствуйте.
Имеется потенциальный шлюз на Debian с сетевыми и-фейсами eth0-eth2.
eth0 смотрит в локалку
eth1 смотрит «в модем»
eth2 смотрит в другую подсеть со своим web-сервером.

Сделал так чтобы по дефолту запросы из локалки уходили через eth1.


/etc/network/interfaces:
allow-hotplug eth0
iface eth0 inet static
        address 192.168.1.251
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
up /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.3.13

allow-hotplug eth1
iface eth1 inet static
        address 192.168.3.13
        netmask 255.255.255.0
        network 192.168.3.0
        broadcast 192.168.3.255
        gateway 192.168.3.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 127.0.0.1

allow-hotplug eth2
iface eth2 inet static
        address 192.168.10.2
        netmask 255.255.255.0
        network 192.168.10.0
        broadcast 192.168.10.255
#       gateway 192.168.10.1


А вот как развернуть запросы для example.dom(например) через eth2?
Собственно больше ничего не нужно. Может завернуть всё на squid и там acl'ами напралять?
Подскажите как правильнее решить в данном случае?
★★★★★

Использовать прокси, ибо если за example.dom стоит рандомные конечные адреса, то iptables не поможет. Если конечно никакой модуль с траф-аналайзером за последние 6 лет не придумали.

zgen ★★★★★
()
Ответ на: комментарий от zgen

Да, конечно, забыл сказать - поддомены будут.

S_Paul ★★★★★
() автор топика

Если точно известен адрес/а удалённого ресурса и там содержится только необходимый ресурс а не например куча виртуальных хостов, то вполне себе можно маршрутизировать пакеты средствами iproute2.

imb ★★
()

Если адрес твоего exmple.com(1.1.1.1) постоянный, то можно просто ip r a 1.1.1.1 via 192.168.10.1

ище правило в табличку на eth0

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth2 -j SNAT --to-source 192.168.10.2

а первое правило поправить на

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 192.168.3.13

swelf
()
Ответ на: комментарий от imb

Ну... вообще-то там будет шлюз, за ним уже сервер с апачем, с поддоменами и как следствие - виртуальными хостами.

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от swelf

Он за шлюзом, на шлюзе бинд, который знает где веб-сервер, но это уже другая головная боль...

А вот за правила спасибо. Только... (вот тут я недопонял) без первого оно всё работать не будет? или просто сработает первое правило iptables?

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от S_Paul

Сработает первое, всего-то добавил условие, с какого интерфейса выходит трафик, на основе этого подменяем source адрес.

На бинд пофиг, в iptables надо добавлять ip, если ip у домена меняется то можно менять переодически правила скриптом. Либо использовать прокси.

В iptables есть модуль strings(кажется так), с помощью которого можно понять к какому домену идет обращение(просто проверять на совпадение содержимое пакетов), но на этом этапе tcp соединение уже установлено и перенаправить его на другой веб сервер не получится.

swelf
()
Ответ на: комментарий от S_Paul

Если все эти виртуальные хосты Ваши, то можно спокойно перенапрявлять пакеты, если нет, то только маршрутизацией эта задача не решается.

imb ★★
()
Ответ на: комментарий от swelf

IP у домена не поменяется, но выходит что шлюзу нужно знать не только IP основного домена но или одождествлять поддомены с ним. Пока что домен просто вписан в hosts...

2 imb: Хосты наши. И как я написал нужно как-то дать знать шлюзу что могут быть и поддомены.

S_Paul ★★★★★
() автор топика

оффтоп: а почему не сделать просто -j MASQUERADE?

И да, про ip адреса и сквид правильно подсказывают

redixin ★★★★
()
Ответ на: комментарий от redixin

-j MASQUERADE - потому, что пакеты могут через любой из интерфейсов ходить и указывать конкретный в данном случае нет надобности?

Про сквид думаю, да.

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от redixin

указывать интерфейс в фаерволе это моветон. в очень редких случаях это нужно

Сильная фраза.

zgen ★★★★★
()
Ответ на: комментарий от redixin

да никогда нет надобности, указывать интерфейс в фаерволе это моветон. в очень редких случаях это нужно

Фраза вообще бред.

nstorm
()
Последнее исправление: nstorm (всего исправлений: 1)
Ответ на: комментарий от S_Paul
Похоже squid не решит проблему полностью, с ftp он не работает.
Но есть идея(вопрос) проще - как при при запросе определённого домена(и его поддоменов) сопоставлять их с определённым IP? Тут и squid не понадобится, только маршрутизацией обойдусь.
S_Paul ★★★★★
() автор топика
Ответ на: комментарий от zgen

Все рекомендуют frox. Не хочу лишнего поднимать.

Пока стоит вопрос о «как при при запросе определённого домена(и его поддоменов) сопоставлять их с определённым IP?» не правя /etc/hosts .

S_Paul ★★★★★
() автор топика
Ответ на: комментарий от S_Paul

Все рекомендуют frox. Не хочу лишнего поднимать.

Squid умеет проксировать ftp.

«как при при запросе определённого домена(и его поддоменов) сопоставлять их с определённым IP?»


Так же, как это делает система разрешения имен - DNS.
т.е. молча.

zgen ★★★★★
()
Последнее исправление: zgen (всего исправлений: 2)
Ответ на: комментарий от S_Paul

А ты генерируй его скриптом, разбирая вывод nslookup.

Такой способ будет хорошо сочетаться с общим стремлением не идти общим путём.

oxumorron
()

Вроде кой-чего получилось, перепроверю - отпишусь.

S_Paul ★★★★★
() автор топика

Итак, сейчас всё работает(похоже) и выглядит так:

cat /etc/network/interfaces :
allow-hotplug eth0
iface eth0 inet static
	address 192.168.1.251
	netmask 255.255.255.0
	network 192.168.1.0
	broadcast 192.168.1.255
up /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 192.168.10.5
up /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth2 -j SNAT --to-source 192.168.4.5


allow-hotplug eth1
iface eth1 inet static
	address 192.168.10.5
	netmask 255.255.255.0
	network 192.168.10.0
	broadcast 192.168.10.255

allow-hotplug eth2
iface eth2 inet static
	address 192.168.4.5
	netmask 255.255.255.0
	network 192.168.4.0
	broadcast 192.168.4.255
	gateway 192.168.4.1

post-up route add -net 192.168.3.0/24 gw 192.168.10.1

cat /etc/resolv.conf :
nameserver 127.0.0.1
nameserver 192.168.4.1

в /etc/dnsmasq.conf добавлено:
address=/.dom.com/192.168.3.209
address=/3.168.192.in-addr.arpa/192.168.3.209

dom.com - web-сервер за другим шлюзом


Всем спасибо на помощь.
S_Paul ★★★★★
() автор топика
Последнее исправление: S_Paul (всего исправлений: 1)
Ответ на: комментарий от S_Paul

И конечно же в /etc/sysctl.conf: net.ipv4.ip_forward=1

S_Paul ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.