Маршрутизация через iptables

Маршрутизация через iptables

У меня есть этот VPN-клиент, который касается таблицы маршрутизации, а затем продолжает следить за ней, чтобы выйти, если ее коснутся. Это своего рода настройка, необходимая для конечной точки, например, ноутбука.

Я хочу использовать небольшой ПК в качестве конечной точки VPN и маршрутизировать через него трафик для других машин в моей локальной сети (192.168.0.0/24).

Поскольку я не могу вносить изменения в таблицу маршрутизации, а все пакеты принудительно пропускаются через устройство VPN tun0, я подумал, iptablesчто мне может помочь POSTROUTEing пакетов в сеть 192.168.0.0 обратно на устройство eth1.

Я не уверен, как это будет работать, потому что после выхода eth1он должен разрешить IPtoMAC, поскольку он уже находится в сети назначения, и я не знаю, разрешился ли пакет уже или этого не произойдет, пока он не достигнет Iface.

Есть какие-нибудь подсказки?

решение1

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

Итак, вот моя попытка дать вам некоторые указания, намеренно игнорируя тот факт, что вы не можете изменить свою таблицу маршрутизации (вы поймете почему, прочитав мое предложение):

В зависимости от VPN-клиента игдеон подключается к FIB (базе прямой информации) ядра, вам может повезти, что мониторинг FIB или, используя вашу таблицу маршрутизации выражений, VPN происходит только для таблиц localи mainправил. Вы можете проверить свои правила маршрутизации, используя

ip rule show

Для каждой из строк после тега «lookup» (которые являются записями таблицы правил) вы можете запросить соответствующую информацию о маршрутизации из FIB, используя

ip route show table <name>

При некоторой удаче вы можете попытаться создать правило, которое соответствует вашим требованиям, и дать ему приоритет в таблице поиска правил. Например (я придумал кое-что, чтобы дать вам фору), давайте добавим новое правило с более высоким приоритетом, чем mainдля определенных потоков:

ip rule add from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 pref 12000
ip rule show
   0:   from all lookup local 
   12000:   from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 
   32766:   from all lookup main 
   32767:   from all lookup default 

В стандартной системе Linux (в данном случае Ubuntu) вы увидите три таблицы правил по умолчанию local, mainи default, из которых вы обычно видите только mainтаблицу при вызове, netstat -rnнапример.

Теперь мы хотим заполнить записи FIB в таблице поиска 888 новыми записями маршрутизации:

ip route add default via 10.37.129.4 dev eth2 table 888

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

ip route show table 888
  default via 10.37.129.4 dev eth2

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

ip route flush cache

Обратите внимание, что с помощью архитектуры iproute2 вы можете фильтровать и изменять практически любую запись FIB; записи правил могут быть даже созданы на основе fwmarks и/или классификаторов u32, как показано ниже (пример взят изкнига маршрутизации политики):

tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 \
    match ip src 10.1.1.0/24 classid :1
ip rule add fwmark 1 table 1 prio 15000 realms 3/4
ip route add default via 192.168.1.1 table 1 src 192.168.1.254
ip route flush cache

На случай, если что-то пойдет не так с записями в таблицах правил, много лет назад я подготовил небольшой фрагмент кода bash, чтобы вернуть мою систему в исходное состояние правил маршрутизации:

: ${KEEP:="local main default"}
while read prio rule; do
     continue=0
     for keep in ${KEEP}; do
         if [ "${rule//lookup ${keep}/}" != "${rule}" ]; then
             continue=1
         fi
     done
     if [ ${continue} -eq 0 ]; then
         ip rule del prio ${prio%%:*} ${rule//all/0/0}
     fi
done < <(ip rule show)

Удивительно, но, похоже, после более чем 10 лет iproute2существования, лишь немногие люди знают, что существует вселенная за пределами классической"сломанный"такие инструменты, как ifconfigили netstat.

Связанный контент