[РЕШЕНО] 2 провайдера + проброс портов iptables/iprouting

Добрый день.
Знаю что тема избитая, но таки хочется понять есть ли возможность пробросить один и тот же порт со стороны 2-х провайдеров на один и тот же внутренний ip. Или это делается другими средствами? Сейчас работает обычные правила iptables для 1-го провайдера где:
$EXTIP1 - ip шлюза смотрящего в 1-го провайдера
$INTIP1 - ip шлюза смотрящий в локалку
$IP - ip внутреннего сервера к которому надо получить доступ

iptables -t nat -A PREROUTING -d $EXTIP1 -p tcp --dport 443 -j DNAT --to-destination $IP:443
iptables -t nat -A POSTROUTING -d $IP -p tcp --dport 443 -j SNAT --to-source $INTIP1

Что именно вам мешает

Что именно вам мешает написать 2 одинаковых правила проброса портов с отличием только в адресе ?
Вот именно, ничего :) Вы так и сделали.
А теперь финт руками: какой дефолт гетвей у "$IP - ip внутреннего сервера к которому надо получить доступ" ? :)
поэтому кроме иптаблесов прйдется скурить еще iproute2 .
Примеров в гугле валом , навалом и еще выше.

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Вот в том то вся и фигня, что

Вот в том то вся и фигня, что не получается у мну с этим iprouting'ом. Настраивал по статье http://www.opennet.ru/docs/RUS/LARTC/x348.html Правила маршрутизации могу приложит отдельно. Если с iptables все понятно, то как надо написать правило маршрутизации?
iptables -t nat -A PREROUTING -d $EXTIP1 -p tcp --dport 443 -j DNAT --to-destination $IP:443
iptables -t nat -A PREROUTING -d $EXTIP2 -p tcp --dport 443 -j DNAT --to-destination $IP:443
iptables -t nat -A POSTROUTING -d $IP -p tcp --dport 443 -j SNAT --to-source $INTIP1

freeman

Нашел доку, неужели все так

Нашел доку, неужели все так печально?
http://sys.net.ru/docs/tri-provajdera-i-servera-vnutri-seti/


Тут следует сделать лирическое отступление, перелапатив массу всяких данных, я не нашел, простой доки по совмещению вышепреведенного роутинга иdnat, поэтому пришлось думать самому :) Оказывается, что проброшенные с помощью DNAT пакеты возвращаются обратно через default route, что нам явно не подходит,пакеты должны возращаться именно через тот хост, через который они пришли. В самом возвращаемом пакете информации через какую линию пришли нет, поэтому пришлосьидти на хитрость. На внутреннем сервере почтовый порт 25(smtp) у меня одновременно еще висит и на 251 порту. Именно по этому признаку я узнаю откуда приходит пакет.

freeman

Сюрприз! Там еще и SNAT есть!

Сюрприз! Там еще и SNAT есть! А также разные таблицы маршрутизации!.. :)

а вы попробуйте не тупо

а вы попробуйте не тупо копипейстить, а в теории разобраться!.. ;) там ничего особо сложного нет.

Пока читаю, спасибо =) А

Пока читаю, спасибо =) А можно глупый вопрос? Это вообще возможно?

freeman

rayg00n написал(а): Пока

rayg00n написал(а):
Пока читаю, спасибо =) А можно глупый вопрос? Это вообще возможно?

Да, у нас все работает.

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Написал скрипт. Все равно не

Написал скрипт. Все равно не получается опубликовать внутренний ресурс через обоих провайдеров

!/bin/env bash

# Интерфейс внутренней сети  
IP_LOCAL="198.168.2.0"
IF_LOCAL="eth0"
NET_LOCAL="198.168.2.0/24"

# Интерфейс внешней сети от провайдера 1
IP_INET1="y.y.y.y"
IF_INET1="eth1"
NET_INET1="y.y.y.y/29"
GW1="y.y.y.x"

# Интерфейс внешней сети от провайдера 2
IP_INET2="z.z.z.z"
IF_INET2="eth3"
NET_INET2="z.z.z.z/28"
GW2="z.z.z.x"

ip route flush table P1 
ip route flush table P2
ip rule delete table P1
ip rule delete table P2

ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table P1
ip route add $NET_LOCAL dev $IF_LOCAL table P1
ip route add $NET_INET2 dev $IF_INET2 table P1
ip route add 127.0.0.0/8 dev lo table P1
ip route add default via $GW1 table P1

ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table P2
ip route add $NET_LOCAL dev $IF_LOCAL table P2
ip route add $NET_INET1 dev $IF_INET1 table P2
ip route add 127.0.0.0/8 dev lo table P2
ip route add default via $GW2 table P2

ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2
ip route add $NET_LOCAL dev $IF_LOCAL src $IP_LOCAL

ip route add default via $GW2

ip rule add from $IP_INET1 table P1
ip rule add from $IP_INET2 table P2

ip route flush cache

Куда копать?

freeman

a хде маркировка траффа ?

a хде маркировка траффа ?

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

А как мне промаркировать

А как мне промаркировать трафик который идет от одного и того же внутреннего ресурса и того же порта? Как iproute поймет что надо трафик завернуть в правильную таблицу, а не пустить по дефоулт маршруту?
Допустим я сделаю

ip rule add fwmark 1 table P1 
ip rule add fwmark 2 table P2

В iptables я должен прописать что? о_о Прошу ногами не бить =)

freeman

BGP? :)

BGP? :)

Собрал все в тестовой среде

Собрал все в тестовой среде без маркировки трафика. Проброс портов работает. На всякий случай хотел уточнить - как правильно указывать подсеть провайдера - через ip/префикс или в стандартном виде 255.255.255.240 ?
Конфиг роутинга:

#!/bin/env bash

# Интерфейс внуртенней сети для gamma.ru
IP_LOCAL="198.168.2.15"
IF_LOCAL="eth0"
NET_LOCAL="198.168.2.0/24"

# Интерфейс внешней сети от провайдера Beeline
IP_INET1="y.y.y.y"
IF_INET1="eth1"
NET_INET1="y.y.y.y/29"
GW1="y.y.y.x"

# Интерфейс внешней сети от провайдера ТЕЛЕНЭТ
IP_INET2="z.z.z.z"
IF_INET2="eth3"
NET_INET2="z.z.z.z/28"
GW2="z.z.z.x"

ip route flush table beeline
ip route flush table telenet
ip rule delete table beeline
ip rule delete table telenet

ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table beeline
ip route add $NET_LOCAL dev $IF_LOCAL table beeline
ip route add $NET_INET2 dev $IF_INET2 table beeline
ip route add 127.0.0.0/8 dev lo table beeline
ip route add default via $GW1 table beeline

ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table telenet
ip route add $NET_LOCAL dev $IF_LOCAL table telenet
ip route add $NET_INET1 dev $IF_INET1 table telenet
ip route add 127.0.0.0/8 dev lo table telenet
ip route add default via $GW2 table telenet

#ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1
#ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2
#ip route add $NET_LOCAL dev $IF_LOCAL src $IP_LOCAL

ip route del default
ip route add default via $GW2

ip rule add from $IP_INET1 table beeline
ip rule add from $IP_INET2 table telenet

ip route flush cache

В iptables:

iptables -t nat -A PREROUTING -d $EXTIP1 -p tcp --dport 443 -j DNAT --to-destination $IP:443
iptables -t nat -A PREROUTING -d $EXTIP2 -p tcp --dport 443 -j DNAT --to-destination $IP:443

Буду тестить в реальной среде

freeman

ни черта не работает =(

ни черта не работает =(

freeman

.

rayg00n написал(а):
ни черта не работает =(

Стандартный алгоритм отладки правил пакетного фильтра:
Настрой журналирование всех reject'ов и пройди по цепочке.

:wq
--
Live free or die

conntrack

Похоже, ваш случай

Прочитал, промаркировал

Прочитал, промаркировал трафик для одного из провайдеров:
$IPTABLES -t mangle -A PREROUTING -p all -i $LAN_IFACE -m conntrack --ctorigdst $INET_IP1 -j MARK --set-mark 1

Далее:
ip rule add fwmark 1 table P1

Вывод ip route list table P1:

default via x.x.x.153 dev eth1
x.x.x.152/29 dev eth1 scope link src x.x.x.157
127.0.0.0/8 dev lo scope link
198.168.2.0/24 dev eth0 scope link

Ничего не изменилось

freeman

rp_filter не настроен был,

rp_filter не настроен был, всем откликнувшимся спасибо.
for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
echo 0 > $i
done

freeman

ls

ls /proc/sys/net/ipv4/conf/all/rp_filter 
/proc/sys/net/ipv4/conf/all/rp_filter

задолбало уже читать кописату гугла 10-лей давности ;(

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

/

slepnoga написал(а):
задолбало уже читать кописату гугла 10-лей давности ;(

Предлагаю начать с малого: с написания в ЧаВо заметки относительно истинной сути гугля ☺
По зависимостям по-хорошему тянется вопрос о диалектике, его могу взять я ;)

:wq
--
Live free or die

Бери, пиши. Я только за.

Бери, пиши. Я только за.

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

К слову сказать в том же

К слову сказать в том же самом http://lartc.org/lartc.html упоминается всего в двух местах, а гугл на темы 2isp + nat + local, выдает все что угодно, но не "reverse path filtering", что несомненно способствует просветлению пациента. При этом в главе 4.2 четко сказано что:

The first is how to route answers to packets coming in over a particular provider, say Provider 1, back out again over that same provider.

В чем прикол?

freeman

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".