URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 96290
[ Назад ]

Исходное сообщение
"Двойной NAT??"

Отправлено Funky , 18-Сен-15 10:36 
Всем привет!

Есть сервер, который имеет за одним из интерфейсов (пусть eth2) сеть 10.160.1.0/24.

Задача: для ПО, работающего на этом сервере надо как-то эмулировать, что за этим интерфейсом на самом деле находится сеть 10.161.1.0/24.
Т.е. ПО на сервере должно обращаться к клиентам в этой сети как к 10.161.1.0/24, а хитрый нат должен перебивать адреса в 10.160.1.0/24.

Я попробовал покрутиться с iproute2 + iptables, но пока выходит затыка с ARP, непонятно адрес из какой сети вешать на eth2 (из реальной 10.160.1.0 или 10.161.1.0)

Как это сделать?


Содержание

Сообщения в этом обсуждении
"Двойной NAT??"
Отправлено name , 18-Сен-15 13:46 
> Всем привет!
> Есть сервер, который имеет за одним из интерфейсов (пусть eth2) сеть 10.160.1.0/24.
> Задача: для ПО, работающего на этом сервере надо как-то эмулировать, что за
> этим интерфейсом на самом деле находится сеть 10.161.1.0/24.
> Т.е. ПО на сервере должно обращаться к клиентам в этой сети как
> к 10.161.1.0/24, а хитрый нат должен перебивать адреса в 10.160.1.0/24.
> Я попробовал покрутиться с iproute2 + iptables, но пока выходит затыка с
> ARP, непонятно адрес из какой сети вешать на eth2 (из реальной
> 10.160.1.0 или 10.161.1.0)
> Как это сделать?

proxy arp


"Двойной NAT??"
Отправлено eRIC , 18-Сен-15 13:48 
не совсем ясная задача, но я как понял нужно беребрасывать пакеты из одной сети в другую, хотя могу ошибаться

алиас на сетевой прописать из сети 10.161.1.0/24

если нужен One-To-One:

#iptables -t nat -A POSTROUTING -s 10.161.1.1 -o eth2:1 -j SNAT --to-source 10.160.1.1
#iptables -t nat -A POSTROUTING -s 10.161.1.2 -o eth2:1 -j SNAT --to-source 10.160.1.2
#iptables -t nat -A POSTROUTING -s 10.161.1.3 -o eth2:1 -j SNAT --to-source 10.160.1.3
и т.д для каждого IP

или если порядок не важен:

#iptables -t nat -A POSTROUTING -s 10.161.1.0/24 -o eth2:1 -j SNAT --to-source 10.160.1.1-10.160.1.254



"Двойной NAT??"
Отправлено Funky , 18-Сен-15 14:14 
> не совсем ясная задача, но я как понял нужно беребрасывать пакеты из
> одной сети в другую, хотя могу ошибаться

попробую сформулировать ещё раз :)
есть сервер, который имеет несколько интерфейсов. Возникла задача подключить к нему очередную сеть 10.160.1.0/24 (но такая уже есть на сервере), и нужно к новой сети обращаться с сервера как к 10.161.1.0/24.
Т.е. в ПО, которое крутиться на сервере, все хосты этой сети должны иметь адреса 10.161.1.0/24.

>[оверквотинг удален]
> #iptables -t nat -A POSTROUTING -s 10.161.1.1 -o eth2:1 -j SNAT --to-source
> 10.160.1.1
> #iptables -t nat -A POSTROUTING -s 10.161.1.2 -o eth2:1 -j SNAT --to-source
> 10.160.1.2
> #iptables -t nat -A POSTROUTING -s 10.161.1.3 -o eth2:1 -j SNAT --to-source
> 10.160.1.3
> и т.д для каждого IP
> или если порядок не важен:
> #iptables -t nat -A POSTROUTING -s 10.161.1.0/24 -o eth2:1 -j SNAT --to-source
> 10.160.1.1-10.160.1.254


"Двойной NAT??"
Отправлено Andrey Mitrofanov , 18-Сен-15 14:17 
> есть сервер, который имеет несколько интерфейсов. Возникла задача подключить к нему очередную
> сеть 10.160.1.0/24 (но такая уже есть на сервере), и нужно к
> новой сети обращаться с сервера как к 10.161.1.0/24.
> Т.е. в ПО, которое крутиться на сервере, все хосты этой сети должны
> иметь адреса 10.161.1.0/24.

Ну второй ip на интерфейс, иногда известный, как alias, и всё.

VLAN-ы и управляемые свичи требуют ещё более переформулированной задачи.


"Двойной NAT??"
Отправлено Funky , 18-Сен-15 14:26 
> Ну второй ip на интерфейс, иногда известный, как alias, и всё.
> VLAN-ы и управляемые свичи требуют ещё более переформулированной задачи.

ещё раз.
У сервера получается по факту 2 подключённые к нему сети с ОДИННАКОВОЙ адресацией 10.160.1.0/24.

На интерфейсе из первой сети у него адрес 10.160.1.1/24, на интерфейсе из второй сети у него 10.160.1.2/24.

Клиенты из первой сети обращаются к нему по адресу 10.160.1.1, клиенты второй сети обращаются по адресу 10.160.1.2. Адреса клиентов не меняются, адреса сервера к которому клиенты обращаются тоже не меняются.
Как я вижу можно попробовать на сервере клиентов второй одиннаковой сети "спрятать" за двойной nat. Т.е. сервер будет обращаться к ним как к 10.161.1.0/24.

так яснее?


"Двойной NAT??"
Отправлено Etch , 18-Сен-15 14:53 
Забудьте про NAT и фейковую сеть, так вы ничего не добьётесь. Вам нужен iproute2 - гуглить "линукс и два провайдера". Например вот: http://habrahabr.ru/post/49137/

В конечном итоге вам нужно будет привязывать программы для работы со второй сетью к соответствующему локальному IP. Например так

ping 10.160.1.222 -I 10.160.1.2


"Двойной NAT??"
Отправлено eRIC , 18-Сен-15 14:57 
>[оверквотинг удален]
> адресацией 10.160.1.0/24.
> На интерфейсе из первой сети у него адрес 10.160.1.1/24, на интерфейсе из
> второй сети у него 10.160.1.2/24.
> Клиенты из первой сети обращаются к нему по адресу 10.160.1.1, клиенты второй
> сети обращаются по адресу 10.160.1.2. Адреса клиентов не меняются, адреса сервера
> к которому клиенты обращаются тоже не меняются.
> Как я вижу можно попробовать на сервере клиентов второй одиннаковой сети "спрятать"
> за двойной nat. Т.е. сервер будет обращаться к ним как к
> 10.161.1.0/24.
> так яснее?

так яснее :) nat тут не поможет, нужен iproute2 и две таблицы чтобы направлять пакеты на нужные сетевые карты. копайте в эту сторону


"Двойной NAT??"
Отправлено Funky , 18-Сен-15 15:21 
>[оверквотинг удален]
>> второй сети у него 10.160.1.2/24.
>> Клиенты из первой сети обращаются к нему по адресу 10.160.1.1, клиенты второй
>> сети обращаются по адресу 10.160.1.2. Адреса клиентов не меняются, адреса сервера
>> к которому клиенты обращаются тоже не меняются.
>> Как я вижу можно попробовать на сервере клиентов второй одиннаковой сети "спрятать"
>> за двойной nat. Т.е. сервер будет обращаться к ним как к
>> 10.161.1.0/24.
>> так яснее?
> так яснее :) nat тут не поможет, нужен iproute2 и две таблицы
> чтобы направлять пакеты на нужные сетевые карты. копайте в эту сторону

как это nat не нужен? в обоих сетях есть клиенты с адресом, например, 10.160.1.10
как вы будете к ним обращаться?


"Двойной NAT??"
Отправлено Etch , 18-Сен-15 15:57 
> как это nat не нужен? в обоих сетях есть клиенты с адресом,
> например, 10.160.1.10
> как вы будете к ним обращаться?

Ещё раз:
ping 10.160.1.10 -I 10.160.1.2


"Двойной NAT??"
Отправлено Funky , 18-Сен-15 16:09 
>> как это nat не нужен? в обоих сетях есть клиенты с адресом,
>> например, 10.160.1.10
>> как вы будете к ним обращаться?
> Ещё раз:
> ping 10.160.1.10 -I 10.160.1.2

А если надо получить доступ на клиента по ssh? что тогда?


"Двойной NAT??"
Отправлено Etch , 18-Сен-15 16:22 
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] ....

"Двойной NAT??"
Отправлено Funky , 18-Сен-15 16:29 
> usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] ....

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


"Двойной NAT??"
Отправлено Etch , 18-Сен-15 16:56 
Тогда сетевые неймспейсы заюзаете (ip netns help). В любом случае вам нужно сначала маршрутизацию на политиках настроить, всё остальное будет работать только поверх неё.

"Двойной NAT??"
Отправлено Etch , 18-Сен-15 20:25 
Впрочем, можно и без политик - сразу через сетевые неймспейсы:
ip netns add second
ip link set dev eth2 netns second

ip addr add 10.160.1.2/24 dev eth2
ip netns exec second   ip addr add 10.160.1.2/24 dev eth2

ip netns exec second   ip link set dev eth2 up


Но тогда все программы для работы со второй сетью придётся запускать в этом же неймспейсе, а для этого нужны права рута, что по-моему неудобно:
gksudo -l -- ip net exec second  su -c opera -l username


А в варианте через политики можно будет поверх приделать NETMAP - тогда получится то, что вы хотели изначально.


"Двойной NAT??"
Отправлено eRIC , 21-Сен-15 06:10 
>> usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] ....
> А если завтра понадобится использование программы, которая не позволяет указать интерфейс
> ил адрес?
> хочется универсального решения.

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

ну а если завтра атомную бомбу выкинут....


"Двойной NAT??"
Отправлено анон , 19-Сен-15 13:25 
> Всем привет!
> Есть сервер, который имеет за одним из интерфейсов (пусть eth2) сеть 10.160.1.0/24.
> Задача: для ПО, работающего на этом сервере надо как-то эмулировать, что за
> этим интерфейсом на самом деле находится сеть 10.161.1.0/24.
> Т.е. ПО на сервере должно обращаться к клиентам в этой сети как
> к 10.161.1.0/24, а хитрый нат должен перебивать адреса в 10.160.1.0/24.
> Я попробовал покрутиться с iproute2 + iptables, но пока выходит затыка с
> ARP, непонятно адрес из какой сети вешать на eth2 (из реальной
> 10.160.1.0 или 10.161.1.0)
> Как это сделать?

с сетями разберитесь, а не хрень городите


"Двойной NAT??"
Отправлено eRIC , 21-Сен-15 06:10 
>[оверквотинг удален]
>> Есть сервер, который имеет за одним из интерфейсов (пусть eth2) сеть 10.160.1.0/24.
>> Задача: для ПО, работающего на этом сервере надо как-то эмулировать, что за
>> этим интерфейсом на самом деле находится сеть 10.161.1.0/24.
>> Т.е. ПО на сервере должно обращаться к клиентам в этой сети как
>> к 10.161.1.0/24, а хитрый нат должен перебивать адреса в 10.160.1.0/24.
>> Я попробовал покрутиться с iproute2 + iptables, но пока выходит затыка с
>> ARP, непонятно адрес из какой сети вешать на eth2 (из реальной
>> 10.160.1.0 или 10.161.1.0)
>> Как это сделать?
> с сетями разберитесь, а не хрень городите

+++1