LinuxForum.Fans
Тема

2 внешних IP: проброс портов и обратное преобразование

Автор: ivul 8 сообщений 3709 просмотров
#232735

Приветствую!

У меня используется два интернет-канала.
IP первого канала используется как IP первичного DNS (вторичный у провайдера). Шлюз первого канала прописан как шлюз по умолчанию.
Второй канал имеет статический внешний IP, но доменного имени не имеет.
Маршрутизация настроена.

Условно:
x.x.x.2 - IP первого канала, шлюз x.x.x.1 (шлюз по умолчанию).
y.y.y.2 - IP второго канала, шлюз y.y.y.1
mydomain.ru - мой домен.

Вопрос 1.
Хочу использовать IP второго канала для получения доступа к службам локальной сети. В частности, к jabber-у.
В настройках bind-а в файле зоны дописываю:

text
$TTL    86400
mydomain.ru.    IN    SOA    ns1.mydomain.ru. root.mydomain.ru. (
                        2012022402
                        8H
                        2H
                        7D
                        1D )

IN NS ns1.mydomain.ru. IN NS ns1.secondary.ru.

$ORIGIN mydomain.ru. IN MX 5 mail.mydomain.ru. localhost IN A 127.0.0.1 @ IN A x.x.x.2 ns1 IN A x.x.x.2 mail IN A x.x.x.2 www IN CNAME @ [b]jabber IN A y.y.y.2[/b] _jabber._tcp.mydomain.ru. IN SRV 0 0 5269 jabber.mydomain.ru. _xmpp-server._tcp.mydomain.ru. IN SRV 0 0 5269 jabber.mydomain.ru. _xmpp-client._tcp.mydomain.ru. IN SRV 0 0 5222 jabber.mydomain.ru.

Дополнительно создаю файл для обратного преобразования:

text
$TTL    86400
y.y.y.IN-ADDR.ARPA.    IN    SOA    ns1.mydomain.ru. root.mydomain.ru. (
                        2012022402
                        8H
                        2H
                        7D
                        1D )
                IN    NS    ns1.mydomain.ru.
                IN    NS    ns1.secondary.ru.

2 IN PTR jabber.mydomain.ru.

В локальной сети прямое и обратное преобразование имени jabber.mydomain.ru работает. А из-вне работает только прямое преобразование IP.
Как правильно настроить обратное преобразование IP, чтобы оно работало во внешней сети?

Вопрос 2.
Ладно. Для Jabber обратное преобразование не требуется.
Сам jabber сервер установлен на сервере внутри локальной сети (за firewall-ом). Сначала jabber.mydomain.ru был присвоен IP x.x.x.2 (т.е. IP первого интернет канала). В iptables было прописано следующее:

text
iptables -t nat -A PREROUTING  -p tcp -d x.x.x.2 --dport 5222 -j DNAT --to-destination 192.168.0.1:5222
iptables -t nat -A PREROUTING  -p tcp -d x.x.x.2 --dport 5269 -j DNAT --to-destination 192.168.0.1:5269

iptables -A FORWARD -p tcp -d 192.168.0.1 -m multiport --dport 5222,5269 -j ACCEPT iptables -A FORWARD -p tcp -s 192.168.0.1 -j ACCEPT

Связь была. Теперь я замени в этих цепочках x.x.x.2 на y.y.y.2. Связь пропала.
Связь появляется, если сделать шлюзом по умолчанию IP y.y.y.1.

Пробовал ставить метки.
В iptables:

text
iptables -t mangle -A PREROUTING -p tcp -d y.y.y.2 -m multiport --dport 5222,5269 -j MARK --set-mark 1

В iproute2:

text
ip rule add fwmark 1 table T2

Не помогло.

Как правильно прописать проброс портов с IP, шлюз которого не является шлюзом по умолчанию?

#232760

))) Как вы во время, щас отпишу. Основная проблема что бежит через шлюз по умолчанию.
У меня была такая же проблема ток сложнее на много.

Обозначим переменную

z.z.z.z - это шлюз твоего y.y.y.2.

text
echo 202 jabber >> /etc/iproute2/rt_tables
ip rule add fwmark 2 table jabber
ip route add default via z.z.z.z table jabber
ip route flush cache

Теперь iptables

[console]
iptables -t nat -A PREROUTING -p tcp -d y.y.y.2 --dport 5222 -j DNAT --to-destination 192.168.0.1:5222
iptables -t nat -A PREROUTING -p tcp -d y.y.y.2 --dport 5269 -j DNAT --to-destination 192.168.0.1:5269

iptables -t mangle -A PREROUTING -s 192.168.0.1 -p tcp --sport 5222 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -s 192.168.0.1 -p tcp --sport 5269 -j MARK --set-mark 2
[/console]

Не забываем про форвард.

#232761

Я могу заверить что работать должно точно.
Если нет ищите проблему в forward и пишите тут что и как у вас.
Да и кстати понравилось как задал вопрос чётко и всё ясно.

#232838

Думаю, мои цепочки всё же рабочие. Мой косяк описан тут: http://www.opennet.ru/docs/RUS/LARTC/c1389.html

10.1. Предостережение.

Не все так просто как кажеться. На интерфейсах eth1 и eth2, маршрутизаторов A и B, необходимо отключить фильтрацию по адресу возврата (return path filtering), иначе будут фильтроваться пакеты, предназначеные для другого интерфейса:

# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
# echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter

Завтра проверю.

А за идею с таблицей "jabber" спасибо. Как-то я не подумал, что для какого-либо сервиса можно отдельную таблицу маршрутизации создавать.

#232927

Не в rp_filter
Вы не там метите пакеты а точнее не стого айпи.
[console]iptables -t mangle -A PREROUTING -p tcp -d y.y.y.2 -m multiport --dport 5222,5269 -j MARK --set-mark 1[/console]

#233158

Хорошо.
А если бы шло перенаправление на другой порт? Например, чтобы войти по SSH снаружи:

text
iptables -t nat -A PREROUTING  -p tcp -d x.x.x.2 --dport 50022 -j DNAT --to-destination 192.168.0.1:22
iptables -t mangle -A PREROUTING -s 192.168.0.1 -p tcp --sport 22 -j MARK --set-mark 3

Так?

#233272

Ну ведь на тот же айпи так зачем mark 3 ? Ставь так же mark 2.

#233326

Да метка по барабану.
Если такие цепочки верные, значит я в iproute2 накосячил.
С rp_filter я действительно погорячился. Если его отключить, то да, мои конфиги работают, но, как мне пояснили, это чревато нехорошими последствиями.

Войдите или зарегистрируйтесь, чтобы ответить.