Рейтинг:2

Что означает ip addr add dev tun1 local 192.168.69.0 remote 192.168.69.1?

флаг jp

Я нашел следующий набор команд, чтобы открыть устройство tun в Linux, которое передает данные в Интернет. Однако пакеты не ретранслируются обратно на устройство tun.

ip tuntap добавить режим dev tun1 tun пользователя `id -un`
ip link set dev tun1 up
IP-адрес добавить dev tun1 локальный 192.168.69.0 удаленный 192.168.69.1
iptables -t filter -I FORWARD -i tun1 -o eth0 -j ПРИНЯТЬ
iptables -t filter -I FORWARD -m состояние --state УСТАНОВЛЕНО,СВЯЗАННО -j ПРИНЯТЬ
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

что значит IP-адрес добавить dev tun1 локальный 192.168.69.0 удаленный 192.168.69.1 иметь в виду? Что местный и удаленный? Что может отсутствовать?

Мой клиент отправляет SYN, сервер отвечает SYN+ACK, но этот SYN+ACK не передается обратно на устройство tun.

флаг us
Что на самом деле вы пытаетесь сделать? Какова топология вашей сети?
Nikita Kipriyanov avatar
флаг za
Устройство Tun не является «сетевым туннелем». Это *виртуальный интерфейс* уровня OSI 3, так что вы можете прикрепить к нему какую-нибудь программу, и все пакеты, которые вы поместите в туннель, будут передаваться этой программе, а также программа может передавать пакеты в систему, чтобы они отображались как выход из интерфейса tun. Опять же, это не имеет ничего общего с туннелированием как таковым. Это просто виртуальный сетевой адаптер. Да, на его основе можно построить решение для туннелирования, но оно будет неэффективно по сравнению, скажем, с туннелем ipip или gre.
Nikita Kipriyanov avatar
флаг za
@А.Б. `tinc` также использует это. Но когда вы используете любой из них, вам никогда не нужно запускать такие команды, как мы видим в этом вопросе.
флаг jp
@NikitaKipriyanov это просто для тестирования. Что не так в моих командах? Я хотел бы построить простой туннель, чтобы я мог протестировать его с помощью стека tcp/ip пользовательского пространства (smoltcp). Отправляйте пакеты в мир и получайте их в туннеле, как если бы это была VPN, как это делает OpenVPN.
Nikita Kipriyanov avatar
флаг za
@А.Б. опять же, использование `tun` не означает, что будет OpenVPN. На самом деле этот парень ясно заявил, что он не собирается использовать OpenVPN, а smoltcp, который является библиотекой Rust, программным сетевым стеком. Я бы не назвал этого монстра "туннелем".
A.B avatar
флаг cl
A.B
@NikitaKipriyanov О, я не читал, что есть smoltcp. Виноват
Nikita Kipriyanov avatar
флаг za
@GuerlandoOCs, в ваших командах нет ничего плохого; Я привык видеть, что люди, которые пытаются программировать сетевые вещи, уже знают основы работы с сетью, поэтому я хотел убедиться, что вы знаете, что делаете.
Рейтинг:2
флаг za

Проще говоря, вы можете различать два типа ссылок (это упрощение, но достаточно для этого вопроса):

  • одноранговые ссылки, где каждая сторона ссылки является одним узлом.Каждый одноранговый узел знает, что за каналом находится только один другой одноранговый узел, а все остальные маршрутизируются. Пример - последовательный канал (через модем PSTN).
  • ссылки с множественным доступом, где за ссылкой может находиться более одного другого узла. Существует множество примеров, таких как Ethernet, WiFi и некоторые устаревшие.

Когда вы настраиваете адрес интерфейса в (обычной) форме «адрес и сетевая маска» через IP-адрес добавить x.y.z.t/n dev eth, вы, по сути, делаете следующие вещи:

  • сообщить ядру, что оно должно распознавать х.у.з.т как свой собственный адрес, поэтому он добавляет локальный маршрут области в местный таблица маршрутизации
  • сообщить ядру, которое обращается как х.у.з.00...0Ã ·xyz11...1 доступны непосредственно по ссылке, поэтому он добавляет маршрут ссылки области действия через этот интерфейс в главный таблица маршрутизации (/ п на самом деле указывает, сколько битов адреса является общим для всех хостов в этой сети)
  • сообщить ядру, что x.y.z.11...1 является «широковещательным» адресом ссылки, поэтому он добавляет широковещательный маршрут в местный таблице (и будут учитывать пакеты, предназначенные для этого адреса, в дополнение к «личному адресу узла» х.у.з.т)

Но за пиринговой связью нет «сети», некому транслировать, может быть только один другой пир. При добавлении адреса к ссылке в форме IP-адрес добавить локальный x.y.z.t удаленный b.c.d.e dev tun, вы, по сути, делаете следующее:

  • сообщить ядру, что оно должно распознать х.у.з.т как свой собственный адрес, поэтому он добавляет локальный маршрут области в местный таблица маршрутизации
  • сообщить ядру адрес b.c.d.e доступен напрямую через эту ссылку, поэтому он добавляет маршрут к этому адресу через этот интерфейс в главный таблица маршрутизации.

Например. команда IP-адрес добавить локальный 10.0.1.0 удаленный 10.0.1.1 dev tun0 просто создает следующие маршруты:

  • local 10.0.1.0 dev tun0 область ядра proto host src 10.0.1.0местный Таблица)
  • 10.0.1.1 dev tun0 ссылка на область ядра proto src 10.0.1.0главный Таблица)

В обоих случаях проверяйте таблицы маршрутизации до и после выполнения команды «добавить ip-адрес».

Заметит вас май добавить конфигурацию однорангового стиля в интерфейс множественного доступа и наоборот; вы даже можете добавить один адрес «/32», а затем вручную добавить маршрутизацию «через интерфейс», и это будет работать точно так же, как если бы вы установили значимую сетевую маску или удаленный адрес в команде. Вы даже можете добавить несколько типов конфигурации в единый интерфейс, и все они будут работать одновременно! Так что не относитесь ко всем этим параметрам слишком серьезно, думайте о них как о способе автоматического добавления необходимых маршрутов при настройке адреса.

флаг jp
поэтому, если я правильно понял, «ip addr add dev tun1 local 192.168.69.0 remote 192.168.69.1» делает мой адрес «192.168.69.0», поэтому каждый пакет с этим адресом в качестве пункта назначения будет достигать «tun1», а также делает «192.168.0.0». 69.1`, доступный через `tun1`. Итак, если я хочу получить доступ к какому-либо веб-сайту, я должен сделать `ip addr add dev tun1 local 192.168.69.0 remote 0.0.0.0`?
Nikita Kipriyanov avatar
флаг za
Нет, вы неправильно поняли идею. Вы, похоже, даже не понимаете, о чем спрашиваете в своем же вопросе, ведь я именно на него и ответил. Напомни, зачем тебе нужен интерфейс `tun`? Как это соотносится с этим комментарием? Если вы хотите задать дополнительные несвязанные вопросы, пожалуйста, задавайте их как отдельные вопросы. Кроме того, ServerFault — неподходящее место для таких вопросов. Суперпользователь, возможно. Если вы разрабатываете программное обеспечение, StackOverflow. Если ваш вопрос касается Linux, перейдите на unix.stackechange.com. Здесь мы решаем бизнес-задачи.

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

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