Рейтинг:-1

Почему эта настройка маршрутизации не работает

флаг cn

У меня есть два интерфейса на серверной машине. Результат IP-маршрут находится рядом:

по умолчанию через 192.168.100.1 dev enp1s0 proto static metric 100
10.8.0.0/24 dev tap0 proto kernel scope link src 10.8.0.1
192.168.100.0/24 dev enp1s0 proto kernel scope link src 192.168.100.201 метрика 100

и айпи адрес следующий (MAC скрыты):

...
1: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.201/24 brd 192.168.100.255 глобальная область действия noprefixroute enp1s0
       valid_lft навсегда
    inet6 fe80::1409:66c6:eb0d:22a1/64 ссылка на область видимости noprefixroute
       valid_lft навсегда
2: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние НЕИЗВЕСТНО группа по умолчанию qlen 100
    ссылка/эфир **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.1/24 brd 10.8.0.255 глобальная область действия tap0
       valid_lft навсегда
    ссылка на область inet6 fe80::85:5fff:fe98:6cb7/64
       valid_lft навсегда

/proc/sys/net/ipv4/ip_forward значение равно 1; брандмауэр отключен.

Я хочу получить доступ 192.168.100.1 от 10.8.0.100. Доступ к веб-серверу (который прослушивает все порты на этой машине) через curl --интерфейс 10.8.0.100 http://10.8.0.1 работает отлично. Но curl --интерфейс 10.8.0.100 http://192.168.100.201 выход Сеть недоступна.

Curl инициирует рукопожатие tcp и отправляет пакет на 10.8.0.100 интерфейс. Затем пакет достигает серверной машины на 10.8.0.1. Сервер смотрит в адрес назначения пакета и видит, что он 192.168.100.201. Затем он смотрит в таблицу маршрутизации и видит, что 192.168.100.201 является местным. Теперь ответ возвращается. Отправитель был 10.8.0.100. Глядя на таблицу маршрутизации, мы можем обнаружить, что она доступна через кран0, который является локальным. Итак, теперь он толкает в кран0 и достигает 10.8.0.100.

Но на самом деле - это не. Это потому, что ход моих мыслей неверен? Я подумал, что информации, представленной в описанной таблице, достаточно, чтобы определить, как пересылать пакеты. Это на самом деле неполное?

Рейтинг:1
флаг np

Прежде всего, укажите IP-адрес и интерфейс с параметром -I для пинг не являются синонимами. Сначала сообщает, какой исходный IP-адрес подобрать. Он направит его в соответствии с сетевым потоком, включая локальные адреса и таблицы маршрутизации. Второй говорит напрямую выбрать интерфейс для отправки пакета (и он выберет первый назначенный IP-адрес в качестве источника).

Далее то, что вы делаете, не имеет ничего общего с пересылкой пакетов. Переадресация означает, что пакет действительно должен прийти «извне». Поскольку вы генерируете пакет с этого хоста, пересылка не требуется. Это локально сгенерированный пакет. Поскольку ваш IP-адрес назначения является одним из локально назначенных адресов, когда вы не заставляете ping отправлять пакет на определенный интерфейс «внешний» (с -Я интерфейс option) ядро ​​будет обрабатывать этот поток пакетов внутри себя. Он просто не будет пытаться вывести его на реальный интерфейс, поскольку его пункт назначения «уже здесь». Так вот что происходит и почему это работает в одном случае, а не в другом.

PS: Также проверьте вариант пинг инструмент на случай, если вы знаете, что делаете, и оба интерфейса подключены к одному и тому же широковещательному домену (я сомневаюсь в этом с интерфейсом TAP).

Maxim Khokhryakov avatar
флаг cn
Я действительно хочу получить доступ к 192.168.100.1 из 10.8.0.100, поэтому маршрут будет следующим: 10.8.0.100 --ip--> 10.8.0.1 --kernel-->192.168.100.201-->ip --> 192.168.100.1.
флаг np
Затем вам нужно добавить маршрут от 10.8.0.100 к 192.168.100.0/24 через 10.8.0.1 (ваш маршрутизатор) и аналогичный обратный маршрут к 192.168.100.1. И пинг оттуда (`10.8.0.100`). То, что вы пытаетесь сделать сейчас, это пропинговать маршрутизатор с маршрутизатора.
Maxim Khokhryakov avatar
флаг cn
проблема в том, что я не могу добавить маршруты на 192.168.100.1. И более важная проблема в том, что я не могу понять, почему этот конфиг не работает. Выполним эту команду на 10.8.0.100: `ping -I 10.8.0.100 192.168.100.201`. Это должно создать пакет ICMP, отправить его на интерфейс 10.8.0.100 и доставить на 10.8.0.1. 10.8.0.1 должен перенаправить его на 192.168.100.201 (потому что они оба на одной машине). Но это не так! `ping -I 10.8.0.100 10.8.0.1` работает нормально, так что проблема однозначно между 10.8.0.1 и 192.168.100.201, т.е. в таблице маршрутизации.
флаг np
@MaximKhokhryakov делает «10.8.0.100» маршрутом по умолчанию «10.8.0.1»? Вы не упомянули об этом. "10.8.0.1 должен перенаправить его на 192.168.100.201 (потому что они оба на одной машине)" - это не переадресация, как я уже говорил. Проблема в том, что пакет достигает машины на интерфейсе «tap0», в то время как IP-адрес назначения находится на «enp1s0». Скорее всего ядро ​​отбрасывает эти пакеты из-за `rp_filter`. Попробуйте отключить его, выполнив `sysctl -w 'net.ipv4.conf.all.rp_filter=0'`
флаг np
@MaximKhokhryakov, также, указан ли шлюз 192.168.100.1 в качестве шлюза 192.168.100.201? Если нет, вам нужно настроить NAT на «192.168.100.201», иначе вы не сможете получить доступ к «192.168.100.1» с «10.8.0.1», так как сначала не будете знать, как перенаправлять пакеты обратно на 10.8. .0.0/24.
флаг np
Кроме того, вы можете попробовать выполнить `ping -r -I 10.8.0.100 192.168.100.201` из `10.8.0.100`.
Рейтинг:0
флаг cn

Проблема заключалась в непонимании разницы между --IP-адрес интерфейса и --интерфейс разработчика. Первый использует таблицу маршрутизации:

с --интерфейс 10.8.0.100 пакет не будет отправлен на кран0 интерфейс (которому принадлежит этот ip). Вместо этого, в соответствии с таблицей маршрутизации, он будет перенаправлен на 192.168.100.58 (интерфейс локальной сети). Итак, маршрут 10.8.0.100 -> 192.168.100.58 -> 192.168.100.201. Даже то, что SYN поставился, сервер странно не отвечает SYN-ACK - в этом причина curl fail.

С использованием --интерфейс tap0 т. е. адрес канального уровня, он будет работать по назначению: 10.8.0.100 -> 10.8.0.1 -> 192.168.100.201. SYN-ACK будет доставлен обратно по тому же маршруту.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.