LINUX.ORG.RU
ФорумAdmin

Перенаправление трафика через туннель

 , ,


1

1

Есть 2 сервера: x.x.x.x и y.y.y.y, сейчас между ними есть gre туннель, весь трафик с x.x.x.x идёт на y.y.y.y. Проблема заключается в том, что я с сервера x.x.x.x не могу слушать айпи y.y.y.y поэтому приходится слушать x.x.x.x и просто перенаправлять трафик, что создает дыры в безопасности и даёт возможность узнать айпи x.x.x.x, ибо на машине работают несколько человек.

Можно ли каким то образом с машины x.x.x.x слушать айпи y.y.y.y, или допустим взять еще один айпи y.y.y.y2 и слушать его?

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

и даёт возможность узнать айпи x.x.x.x, ибо на машине работают несколько человек.

На какой машине работает несколько человек? Если на x.x.x.x, то они и так знают этот ip-адрес. Если на y.y.y.y, то они всё равно могут узнать с какого адреса установлен тунель (если админы).

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

Все работают на y.y.y.y, трафик идёт через x.x.x.x, то есть все знают только айпи x.x.x.x. Сейчас проблема в том, что если запустить программу с айпи 0.0.0.0, а потом каким то образом проверить с какого айпи работает программа, то можно узнать айпи y.y.y.y. Прав у юзеров не так много, но такая ситуация есть. Поэтому и надо прослушивать айпи машины x.x.x.x, чтобы точно не узнать исходный. Вы написали что это возможно сделать, но как? перекопал кучу документаций и форумов, но ничего толкового не нашел.

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

Поэтому и надо прослушивать айпи машины x.x.x.x, чтобы точно не узнать исходный.

Эту фразу, касательно «прослушивать» я не совсем понял.

Если на машине y.y.y.y запустить программу, устанавливающую соединение без биндига к ip-адресу, допустим:

telnet mail.ru 80

то в списке сокетов (вывод ss -t) будет соединение от адреса, указанного поле src в default маршруте в таблице main. В сеть уйдёт пакет от адреса, указанного SNAT правиле (если такое будет). Далее, если у вас там GRE, то по идее, все исходящие соединения y.y.y.y должны идти через этот тунель и на x.x.x.x для них будет сделан SNAT. И уже этот адрес будет отображён на web-странице всяких сайтов типа https://whatismyipaddress.com/

Или у вас y.y.y.y должен открывать соединения в инет минуя тунель на x.x.x.x?

Поэтому вопрос в том, что именно означает:

а потом каким то образом проверить с какого айпи работает программа,

Если на y.y.y.y запускается ″wget -qO - icanhazip.com″ — это одно, а если ″ss″ или ″netstat″, то это другое. От первого выход в инет через GRE тунель, от второго назначить на y.y.y.y какой-нибудь «серый» адрес, чтобы показывало его, а исходящие пакеты править SNAT'ом.

Для второго случая вобще можно сделать как-то так:

ip addr add 8.8.8.8 dev eth0
ip route add 8.8.8.8 dev eth0 via y.y.y.z src y.y.y.y table 88
ip route replace default via y.y.y.z src 8.8.8.8

ip rule add prio 10000 from all lookup local
ip rule del prio 0
ip rule add prio 1 from all to 8.8.8.8 ipproto icmp lookup 88

iptables -t nat -I POSTROUTING -s 8.8.8.8 -j SNAT --to-destination y.y.y.y
iptables -t nat -I OUTPUT -d 8.8.8.8 -p udp -m udp --dport 53 -j DNAT --to-destination 8.8.4.4

где y.y.y.z это тот шлюз, что сейчас у y.y.y.y в настройках.

И получить, что в выводе ″ss″ (netstat) у вас будет 8.8.8.8, и при этом ping 8.8.8.8 будут идти в инет. Но нужно понимать, что y.y.y.y будет всегда в списке ip-адресов на интерфейсах (ip addr) и tcpdump всегда будет показывать пакеты с y.y.y.y. В принципе, от первого можно избавиться с помощью ″ip neigh add proxy y.y.y.y dev eth0″, но не от tcpdump...

Может GRE тунель будет работать, если на y.y.y.y назначить x.x.x.x и сделать:

ip rule add prio 1 from all to x.x.x.x ipproto gre lookup 88

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

Под прослушиванием я имел ввиду запуск программы под этим айпи. Например mysql которая запущена на машине y.y.y.y чтобы использовала только айпи x.x.x.x.

С вами можно как-то связаться? Я могу попробовать объяснить более понятно в прямом диалоге и заплатить за решение проблемы.

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

Мой e-mail в профиле, но это не особо лучше форума. IM у меня нет, номер телефона не хочу давать (да и звонок обычно выключен). Времени что-либо настраивать даже за деньги нет.

По поводу ip, на который биндится запускаемый софт я писал. Проше на y.y.y.y назначить какой-нибудь «серый» ip-адрес, типа 10.10.10.10, а y.y.y.y убрать, используя SNAT, DNAT, proxy arp запись. Любопытным можно сказать, что это контейнер на сервер x.x.x.x...

Или можно действительно создать отдельный network namespace, отдать туда через bridge сетевой интерфейс, там держать y.y.y.y., GRE тунель, маршрутизировать и NATить трафик в основной namespace. А на виртуальный интерфейс veth0 в основном namespace повешать x.x.x.x. http://tolik-punkoff.com/2019/11/24/network-namespaces-ili-neskolko-virtualny...

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