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

iptables,ssh маршрутизация

 ,


0

2

Доброго времени стуток. Опишу ситуацию на хосте имеется запись в таблице маршр-ии:

xx.xx.xx.xx 255.255.255.255 192.168.1.1 eth0
если создать впн подключение, все запросы заворачиваются в туннель через tun интерфейс. Если после этого создать ssh подключение к адресу xx.xx.xx.xx. Исходящяя tcp сессия на удаленный адрес xx.xx.xx.xx согласно таблице маршрутизации создается с интерфейса eth0/192.168.1.76. Как сделать чтобы пакеты уходили с tun интерфейса, не удаляя этот маршрут? на ум пришло такое, но чет нет уверенности что заработает.
iptables -A POSTROUTING -d xx.xx.xx.xx/32 -p tcp -m tcp --dport 22 -o tun+ -j MASQUERADE
iptables -A PREROUTING -d 192.168.1.76 -p tcp -m tcp --sport 22 -j DNAT --to-destination ip_tun
все усугубляется еще тем что адреса интерф. eth0, tun+ - динамические. ЛОР послушаю ваших советов. Может как то по другому можно пометить пакет и дать ему верный путь.


Ответ на: комментарий от rumgot

или так netstat -rn только не совсем понятно как таблица поможет пометить пакет... ладно подождем

ving2
() автор топика

Статический маршрут добавь

zolden ★★★★★
()

Вот честно, долго курил... Ничего не понял. Может все-таки нормально опишите? С как просили ip r s, ip a ?

anc ★★★★★
()

маркируй пакет в иптаблес. потом маршрутизируй как душе угодно по метке.

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

Ничего не понял.

http://pastebin.com/g6RmaD5g

Если добавить статич. маршрут ?

ip route add xx.xx.xx.xx/32 via 10.5.11.5 src 10.5.11.6

то какой будет приоритет у этих двух маршрутов через eth0 и tun0? маршрутизацию с трудом понимаю.

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

Простите не правильно написал. Первым было:
«Ничего не понял. Может все-таки нормально опишите?»
Я вот реально не вкуриваю, или может мало курю... в чем проблема?

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

Я вот реально не вкуриваю, или может мало курю... в чем проблема?

в том что при создании ssh сессии она создается вот так (и не коннектиться в следствии чего:

192.168.1.92:port xx.xx.xx.xx:22 SYN SENT /ssh

eth0 - 192.168.1.92 а должна быть вот так

10.5.11.6:port xx.xx.xx.xx:22 ESTABILESHED /ssh


tun0 - 10.5.11.6
ving2
() автор топика
Ответ на: комментарий от ving2

потому что есть такой маршрут:

xx.xx.xx.xx via 192.168.1.1 dev eth0  proto static  metric 10
что тут еще добавить, чтобы было понятно.

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

Попробую еще раз,последний надеюсь));

ssh user@xx.xx.xx.xx

формируется пакет согласно таблицы маршрутизации, т.к. есть запись вида:

xx.xx.xx.xx via 192.168.1.1 dev eth0  proto static  metric 10
то ядро инкапсулирует пакет с адресом назначения xx.xx.xx.xx, адресом источника интерфейса eth0|192.168.1.92. это понятно? если его убрать то пакет уйдет через дефолтный маршрут, через tun интерфейс - как и должно быть. Но я его убирать не хочу, т.к. эта запись нужна, она говорит что есть в глобальной сети интернет один хост c адресом (xx.xx.xx.xx). Как предложили выше добавить статический маршрут (не уверен что верно):
ip route add xx.xx.xx.xx/32 via 10.5.11.5 src 10.5.11.6
поидее это должно сформировать пакет адресованный xx.xx.xx.xx через tun интерфейс(с адресом источника src 10.5.11.6). Только вот не будет ли проблем при двух этих маршрутах и какой приоритет у них будет?

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

Опять не понятно, почему вообще 192.168.1.76 должен отправлять пакеты на 192.168.1.92 ? Что такое x.x.x.x адрес vpn сервера? 192.168.1.1 это адрес роутера для локалки 192.168.1.0/24 ?

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

Опять не понятно, почему вообще 192.168.1.76 должен отправлять пакеты на 192.168.1.92 ?

Он и не должен. Где я это говорил, это один и тот же адрес (для eth0). Он динамический поэтому разный получился.

Что такое x.x.x.x адрес vpn сервера?

да удаленный сервер 192.168.1.1 это адрес роутера для локалки 192.168.1.0/24 ? да маршрутизатор. ---- Сначала идет подкл. к впн серверу. Затем хочется по ssh к нему зайти, но уже в туннеле.

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

Что такое x.x.x.x адрес vpn сервера?

да

192.168.1.1 это адрес роутера для локалки 192.168.1.0/24 ?

да маршрутизатор

Сначала идет подкл. к впн серверу. Затем хочется по ssh к нему зайти, но уже в туннеле.

п.с. повторил чтобы было понятнее

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

Конечное решение конечно есть. Но если вы прям с этого компа и подключаетесь, не проще ли на 10.5.11 подключаться?

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

не проще ли на 10.5.11 подключаться?

да действительно, совсем в голову не пришло. спасибо. Еще я пробывал вот этот маршрут добавить.

ip route add xx.xx.xx.xx/32 via 10.5.11.5 src 10.5.11.6
вроде все как надо ssh соединение пытается установиться с адресом ист. 10.5.11.6. Острой необходимости нет, так что поставлю решено.

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

вроде все как надо ssh соединение пытается установиться с адресом ист. 10.5.11.6. , но впн туннель падает.

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

Вы всетаки очень все через одно место описываете (простите за французский). Так работает или нет?

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

если маршрут добавить, проблема с адр ист. устраняется. но впн туннель падает - возможно в правила iptables нужно смотреть. Итог не работает. Но не суть. Хрен с ним! спасибо за участие.

ving2
() автор топика

Да одинаковые сети у тут на двух концах впн-а. Это вообще звездец, в принципе, и это только первый камень, который найден.

Чо сказать, маршрутизацию можно статикой на один адрес сделать, даже в скрипт поднятия ВПНа запилить, только один фиг это не правильно от слова совсем. Правильный выход либо переводить одну сеть в другую, либо не стучать в принципе из одной в другую, а повесить пробросы на точках впн-а от порта во внутреннюю сеть.

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

Бгы, а падает кстати скорее всего от лупа маршрута... Если это впн работа - дом проще дома сделать сетку 192.168.100.0/24 или вообще 172.20.1.0/24 к примеру...

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

Да одинаковые сети у тут на двух концах впн-а. Это вообще звездец, в принципе, и это только первый камень, который найден.

а можно поподробнее, про одинаковые сети. и где они должны быть разные. на впн сервере вот такая сеть 10.5.11.0/24 ...

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

да с этим понятно. пойдет.

Ну и пользуйте.

теперь бы еще понять, что с сетями не так.

Это то что я описал, реализуемо но вам явно не надо. Если интересно курим iproute2+iptables. Только реально вам оно надо?

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

курим iproute2+iptables. Только реально вам оно надо?

да чисто для ознакомления. Обычно под этим iproute2+iptables попадается настройка маршрутизации для двух провайдеров.

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

Да одинаковые сети у тут на двух концах впн-а. Это вообще звездец, в принципе, и это только первый камень, который найден.

Вы как такое увидели?

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

Та все тоже самое, создаем отдельную таблицу, через iptables маркируем пакет, и ip rule заворачиваем этот mark.
Документации для вашего варианта, как писал выше, просто дофига.

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

хз, подождем ответ «белки».
Я, несмотря на вашу косность в теме, вроде распарсил, а то что увидела «белка» я не увидил, так что мне самому интересно.

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

создаем отдельную таблицу, через iptables маркируем пакет, и ip rule заворачиваем этот mark.

может быть так:

iptables -t mangle -A OUTPUT -d xx.xx.xx.xx/32 -p tcp -m tcp --dport 22 -j MARK --set-mark 0x2
iproute add default via 10.5.11.6 dev tun0 table 102
ip rule add fwmark 0x2/0x2 lookup 102

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

Вроде да, сплю уже... сорри проверьте сами, но так похоже на правду.

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

А как ещё понимать что есть маршрут

xx.xx.xx.xx via 192.168.1.1 dev eth0  proto static  metric 10
А по ссш в него надо стучаться в впн? Значит есть 2 машины с одинаковым адресом с доступом из локальной сети и за впном. А это значит что сети как минимум накладываются (да, из одной машины тоже таки сеть).

Ну а дальше можно шаманить, но как только по ссш поработаешь и поднимешь какой-нибудь сервис там, надо будет и его подшаманить...

Нет, возможно тс извратень и стучится на один сервак через шлюз и через впн? Но тогда опять полностью не логично, ссш что, отгорожен с одной стороны, но висит на внешнем адресе, с доступом только изнутри? А другие сервисы отгорожены изнутри чтоли, почему не менять полностью маршрут к этому адресу в тунель при его поднятии???

В общем-то решение есть, ванговать дальше не имеет смысла до следующего поста:

Есть ссш до машины за тунелем, но не могу попасть на веб-сервер

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

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

Ничего это не значит. Мне удивительно как можно было такой вывод сделать.

Нет, возможно тс извратень и стучится на один сервак через шлюз и через впн?

Да особого извращения я не вижу в желании что бы 22 порт через тунель шел.

А другие сервисы отгорожены изнутри чтоли, почему не менять полностью маршрут к этому адресу в тунель при его поднятии???

Прочитайте постами выше, это адрес сервера впн.

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

Есть ссш до машины за тунелем, но не могу попасть на веб-сервер

Но вот этим вы одну мысль подкинули. ТС обрати внимание можно от обратного пойти, прописать роут только для впн, а все остальное потом само пойдет через defroute на tun

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

Прочитайте постами выше, это адрес сервера впн.

Да, не сразу понял. То есть это и сервер впн до кучи... Тогда я в принципе не понимаю - ssh 10.5.11.5 не работает принципиально? Это же тот-же сервер, тоже интерфейс за аутентификацией впна, должен быть статикой...

Просто ну в корне не верно по-разному маршрутизировать разные пакеты к ОДНОМУ интерфейсу ОДНОГО хоста. Полнейший бред. Есть интерфейс внешний, есть внутренний. Разобраться кто есть что и во внутренний - управление, во внешний - всё что должно смотреть наружу, а не делать хаки и трики, в которых потом кто-то будет ломать голову и хотеть сломать кому-то руки.

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

Да, не сразу понял.

Да я тоже парсил долго, ТС «умеет» задачу описывать :)
А вот про остальное, сама задача как ее уже распарсили, может иметь место в жизни. Во всяком случае у меня, хоть и не про ssh, такое реализовано, да это костыль, но жизнь заставила его поставить, не все только от нас зависит.

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

прописать роут только для впн

тот же iproute2? читаю про него, но с трудом понимаю)

iptables -t mangle -A OUTPUT -d xx.xx.xx.xx/32 -p tcp -m tcp --dport $PORT -j MARK --set-mark 0×1
ip rule add fwmark 0×1 lookup 100
iproute add default via 192.168.1.1 table 100

а это будет работать если в таблице main нет дефолтного маршрута через 192.168.1.1 ?

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

Ивсё-же, ssh 10.5.11.5 не работает при поднятом впн?

так работает. Принципиально не надо. Без вас не дошло, что нужно на локальный адрес постучать.

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

Уж извините, но таки вроде я оказался прав. Задача имела простое и правильное решение. Просто для меня это несколько принципиально: то что может быть без костылей должно быть без костылей... Сам работал разъездным админом и представляю что такое разбираться в чужих костылях, и что из этого следует...

Блин, неделю не могли додуматься... ))) Умеет ТС задать задачку. =)

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

Умеет ТС задать задачку. =)

ага чет долго распарсивали, видимо у меня совсем плохо (как сказал anc c французским), оказалось такое простое решение=) спасибо всем.

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

Ну и отличн, спасибо за разминку мозга и небольшой срач! =) «Белка» довольна...

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

И ещё, пока меня плющит... Рекомендую вообще убрать ssh с xx.xx.xx.xx/32 для безопасности. Это снизит если что нагрузку на файрвол и даст сразу понять что туду стучать не нужно, не возникнет впоследствии такой задачи как у вас... Пусть висит только в впн-е, ну и если есть, на локальном адресе... Но помните одно НО: удалённая настройка доступа - к дороге....

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

Блин, неделю не могли додуматься... )))

Ну если по честному, не неделю а всего лишь один день... правда это было нифига не просто ))) Все что после iptables,ssh маршрутизация (комментарий) уже на тему «подпорок»

Просто для меня это несколько принципиально: то что может быть без костылей должно быть без костылей...

Ну у ТС это отдельный комп, невижу ничего плохого что бы в рамках самообразования и потестировать. Потом уже где-то в проде вполне может пригодиться пусть и с другой конфигурацией. Согласитесь что лучше тренироваться на «кошечках», чем как нередко делают так называемые «одмины» сразу на проде опыты ставят, а потом темы плодят «аааааа у меня все сломалось, помогите срочно»

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.