У меня есть этот 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
.