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

Отправка ответа по тому же интерфейсу откуда пришёл запрос

 , , ,


2

1

Дано:

  • Debian Linux;
  • интерфейс bond0, раздающий интернеты;
  • интерфейс eth1, смотрящий в локалку;
  • интерфейс tun1 клиента OpenVPN, раздающий доступ к некоторым ресурсам в интернетах с помощью опции -j MASQUERADE iptables;
  • параметры маршрутизации с помощью набора опций route в конфиге клиента OpenVPN, описывающего сети с указанием IP и маски этих некоторых ресурсов, доступ к которым должен осуществляться через интерфейс tun1.

Что нужно: в случае поступления запросов через интерфейс bond0 (не через OpenVPN туннель) с маршрутизируемых сетей, указанных в конфиге клиента OpenVPN, отправлять ответы через тот же интерфейс bond0, при этом сохранив возможность доступа к этим ресурсам при помощи туннеля OpenVPN. Каким способом это лучше всего реализовать?

★☆

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

Маркировка соединений (CONNMARK), маркировка пакетов по маркеру соединения, выбор таблицы маршрутизации по маркеру пакета.

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

Спасибо за ссылку. Прописал таблицы T1 и T2 в /etc/iproute2/rt_tables, наговнокодил на скорую руку скрипт:

#!/bin/sh
# http://www.opennet.ru/tips/info/1179.shtml

iface1=tun1
iface2=bond0

iface1_ip=$(ifconfig "${iface1}" | grep 'inet addr:' | cut -d':' -f2 | cut -d' ' -f1)
iface1_gw=$(ifconfig "${iface1}" | grep 'P-t-P:'     | cut -d':' -f3 | cut -d' ' -f1)

iface2_ip=$(ifconfig "${iface2}" | grep 'inet addr:' | cut -d':' -f2 | cut -d' ' -f1)
iface2_gw=$(route -n | awk -v iface="${iface2}" '{if ($8 == iface && $2 != "0.0.0.0") print $2;}' | head -n 1)

while [ -z "${iface1_ip}" ] || [ -z "${iface2_ip}" ]; do
        sleep 10s
done

routes()
        {
        ip route "${1}" default via "${iface1_gw}" table T1
        ip route "${1}" default via "${iface2_gw}" table T2
        ip route "${1}" default via "${iface1_gw}"
        ip rule "${1}" from "${iface1_ip}" table T1
        ip rule "${1}" from "${iface2_ip}" table T2
        }

case "${1}" in
        up)
                routes 'add'
                ;;
        down)
                routes 'del'
                ;;
        *)
                echo "${iface1}\nIP:\t${iface1_ip}\nGW:\t${iface1_gw}\n"
                echo "${iface2}\nIP:\t${iface2_ip}\nGW:\t${iface2_gw}\n"
                ;;
esac
В конфиг клиента OpenVPN засунул опции
script-security 2
up   "'/somepath/gateways.sh' up"
down "'/somepath/gateways.sh' down"
Вроде работает.

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

Спасибо за наводку, настроил маркировку пакетов как описано по ссылке ибо выпадение раздающего интернеты интерфейса bond0 из общей таблицы маршрутизации после применения предыдущего способа в моём случае было нежелательным.

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