LINUX.ORG.RU
ФорумAdmin

Не стандартная маршрутизация

 


1

2

Доброго времени суток!
На своём ПК имею два p2p туннеля tun0(172.31.255.2),tun1(172.31.255.4).
На выходе каждого туннеля имеется своя подсеть вида 192.168.0.0/24.
На выходе каждого туннеля имеется маскарад трафика приходящего из этих туннелей.
При указании маршрута 192.168.0.x via 172.31.255.2 трафик идёт успешно.
Хотел бы иметь возможность обращаться к этим подсетям по адресам:
172.16.1.x (tun0 -> 192.168.0.x)
172.16.2.x (tun1 -> 192.168.0.x)

Что для этого нужно сделать?

Подойдёт любой вариант, например:
Создать виртуальный интерфейс(слышал о veth, но не разобрался как им пользоваться) и пропустить сначала трафик через него, а далее с подменой адреса обращаться к tun0;
Любые махинации с ip/iptables/route;

Буду благодарен за любые наводки по данной теме!
P.S. Доступ имею только своему ПК



Последнее исправление: bober132 (всего исправлений: 1)

Если правильно понял то ваш вариант iproute2 namespace, тут есть темы про это. И еще, если хосты к которым вам надо в 192.168.0.0/24 обращаться вполне конкретные и они не совпадают у двух сетей, можно ручками роутинг до них прописать.

anc ★★★★★
()

Добавлю к сообщению выше - помимо iproute2 namespace скорее всего еще понадобится NETMAP для iptables если у вас одинаковые подсети в каждом из тунелей. В общем задача интересная, сам с таким не сталкивался. По возможности отпишись здесь с результатом.

FreeBSD ★★★
()

а как ты определяешь через какой tun доступен конкретный 192.168.0.x ?

192.168.0.x может быть одновременно в обоих сетях ?

Почему бы не прописать маршрут 192.168.1.0/24 через tun1 и мапить 192.168.1.0/24 -> 192.168.0.0/24 ?

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

Почему бы не прописать маршрут 192.168.1.0/24 через tun1 и мапить 192.168.1.0/24 -> 192.168.0.0/24 ?

Вот и гуру. А можно в примерах? Я как и отписавшийся FreeBSD такого не делал. Но интересно. Или это про NETMAP речь?

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

zaz, пробовал использовать NETMAP:

ip route add 0.0.0.0/0 dev tun0 table 101101 
ip rule add fwmark 101101 lookup 101101 
iptables -t mangle -I OUTPUT -d 172.16.1.0/24 -j MARK --set-mark 101101
iptables -t nat -I OUTPUT -d 172.16.1.0/24 -j NETMAP --to 192.168.0.0/24 
iptables -t nat -I POSTROUTING -o tun0 -j SNAT --to 172.31.255.2 
iptables -t nat -I POSTROUTING -o tun0 -j MASQUERADE ##это правило установлено на конце туннеля (ro)
Пытаюсь отправить пакет (ping -c1) расписываю шаги NAT
send:
1. s_ip=192.168.0.100 d_ip=172.16.1.22
2. s_ip=192.168.0.100 d_ip=192.168.0.22
3. s_ip=172.31.255.2 d_ip=192.168.0.22
4. s_ip=192.168.0.1 d_ip=192.168.0.22

recv:
1. s_ip=192.168.0.22 d_ip=192.168.0.1
2. s_ip=192.168.0.22 d_ip=172.31.255.2
3. s_ip=192.168.0.22 d_ip=192.168.0.100
???

где 192.168.0.100 - я,192.168.0.1 роутер(др. офис), 192.168.0.22 коллега(др. офис).
Пакет отправляю со своего ПК т.е. цепочка OUTPUT. После прохождения пакета, я упираюсь в смену s_ip в PREROUTING.

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

Подсети у всех одинаковые:
мой офис: 192.168.0.0/24
tun0(офис коллеги №1): 192.168.0.0/24
tun1(офис коллеги №2): 192.168.0.0/24

Почему бы не прописать маршрут 192.168.1.0/24 через tun1 и мапить 192.168.1.0/24 -> 192.168.0.0/24 ?

Можно пример/подробнее?

Пока-что буду пробовать iproute2 namespace как советовали anc,FreeBSD

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

«iptables -t nat -I POSTROUTING -o tun0 -j MASQUERADE» - это пипец. Если бы оно всё было через "-A", то смысл был бы более реальный, но MASQUERADE там лишний, т.к. перед ним с аналогичными условиями срабатывает SNAT.

iptables -t mangle -A OUTPUT -o tun0 -j MARK --set-mark 1
iptables -t nat -A OUTPUT -d 172.16.1.0/24 -j NETMAP --to 192.168.0.0/24
iptables -t nat -A POSTROUTING ! -s 172.31.255.2 -o tun0 -j SNAT --to 172.31.255.2
ip ru add fwmark 1 lookup 2
ip ro add default dev tun0 table 2

В вики похоже пропущен reroute check после nat/OUTPUT

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

Извиняюсь за

iptables -t nat -I POSTROUTING -o tun0 -j MASQUERADE
тут я опечатался, на том серве стоит eth1 вместо tun0. Форвард там разрешён
Ваши правила попробую, спасибо!

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

с езернетом вмето туннеля не пройдет фокус с

ip ro add default dev tun0 table 2
via нужно будет указать.

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