таблица маршрутов со сломанными eth0 и ppp0

Рекурсия вверх до достижения / и вызов функции для каждого каталога.

#!/bin/sh

function mangleperms {
    echo DEBUG would chmod 755 "$1"
}

function walktoroot {
    DIR="$1"
    HANDLE="$2"
    if [ "$DIR" = "/" ]; then
        return
    fi
    "$HANDLE" "$DIR"

    # recursion (noun): see recursion
    PARENTDIR=`dirname "$DIR"`
    walktoroot "$PARENTDIR" "$HANDLE"
}

if [ -z "$1" ]; then
    echo >&2 "Usage: walktoroot dir"
    exit 1
fi
# TODO probably more edge cases on relative dirs, though there are means
# to fully qualify those
if [ "$1" = "." ]; then
    DIR=`pwd`
else
    DIR=$1
fi

walktoroot "$DIR" mangleperms

Например.

$ pwd
/var/tmp/a/b/c
$ /home/jdoe/walktoroot .
DEBUG would chmod 755 /var/tmp/a/b/c
DEBUG would chmod 755 /var/tmp/a/b
DEBUG would chmod 755 /var/tmp/a
DEBUG would chmod 755 /var/tmp
DEBUG would chmod 755 /var
$ 
1
15.12.2017, 17:03
2 ответа

Ваша проблема

Я бы порекомендовал для этого отдельную таблицу маршрутизации, поскольку я предполагаю, что трафик, поступающий на 192.168.0.2 , имеет адрес источника 35.100.100.35 . Проблема в том, что 35.100.100.35 не указан в вашей таблице маршрутизации, поэтому используется значение по умолчанию.

Вам может сойти с рук такая простая вещь, как:

ip route add 35.0.0.0/8 via 192.168.0.1 dev ppp0

Таким образом, когда ваша машина пытается ответить на адрес 35 , она делает это на ppp0 интерфейс.

Далее следует более надежная / проработанная версия.

ПРИМЕЧАНИЕ. Вам следует перезагрузить компьютер, чтобы очистить все временные изменения, внесенные вами в таблицу маршрутизации.


Правила маршрутизации

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

ip rule add from [interface ip]/[netmask] tab [table number] priority [priority]
ip rule add to [interface ip]/[netmask] tab [table number] priority [priority]

В этом случае вас беспокоит трафик, поступающий на 192.168.0.2 (IP-адрес вашего устройства ppp0 ). Вам нужно будет создать новую таблицу маршрутизации, добавив в файл: / etc / iproute2 / rt_tables . Синтаксис: [номер таблицы] [имя таблицы] . Обычно я использую имя интерфейса в качестве имени таблицы, чтобы все было проще.

echo "168   ppp0" >> /etc/iproute2/rt_tables 

ip rule add from 192.168.0.2/32 tab 168 priority 101
ip rule add to 192.168.0.2/32 tab 168 priority 101

Это должно привести к тому, что весь трафик, адресованный к 192.168.0.2 , будет соответствовать таблице маршрутизации 168 , а также любому трафику, который является ответом на трафик в этой таблице.


Использование новых таблиц маршрутизации

Теперь мы направили трафик в эту таблицу маршрутизации 168 , но она будет пустой, нужно только добавить к ней маршрут по умолчанию сейчас.

ip route add default via 192.168.0.1 dev ppp0 table 168

Это добавляет маршрут по умолчанию в таблицу 168 , что означает просто использовать интерфейс ppp0 .


Как это выглядит

В конечном итоге ваши таблицы маршрутизации, вероятно, должны выглядеть следующим образом:

# ip route show
default dev eth0 proto static metric 1024
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.20
192.168.0.0/24 dev ppp0 proto kernel scope link src 192.168.0.2

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

# ip rule show
0:       from all lookup local
101:     from 192.168.0.2 lookup ppp0
101:     from all to 192.168.0.2 lookup ppp0

Здесь перечислены ваши правила маршрутизации в формате «[приоритет]: [правило] поиск [таблица]». В этом примере указано, что обычно используется локальная таблица маршрутизации. Если трафик идет к или от 192.168.0.2, используйте таблицу маршрутизации с именем ppp0 .

# ip route show table ppp0
default via 192.168.0.1 dev ppp0

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


Конечный результат

Конечным результатом этого является то, что когда трафик направляется на IP-адрес вашего интерфейса ppp0 или с него, он будет использовать таблицу маршрутизации с именем ppp0 . Таблица маршрутизации ppp0 просто отправляет весь трафик на устройство ppp0 .

1
27.01.2020, 23:47

route add -net 192.168.0.0/24 gw 192.168.0.1 dev ppp0

0
27.01.2020, 23:47

Теги

Похожие вопросы