Tun0 linux что это

Виртуальный сетевой интерфейс в linux. TAP vs TUN

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

Создавать сетевые интерфейсы в linux нам позволяют различные модули ядра. Но там, где для реальных железных сетевых карт эти модули ядра, или как их еще называют — драйверы, обеспечивают прием данных от стека TCP/IP и их формирование уже в виде электрического сигнала на сетевой карте, драйверы виртуальных сетевых интерфейсов (loopback) могут лишь, приняв эти данные, отдать их какому-нибудь приложению для дальнейшей обработки. Такая функциональность может быть востребована, если на вашем сервере установлены программы, использующие стек TCP/IP для обмена данными и, понятно, не нуждающиеся в выводе этих данных в реальную сеть. Пример: веб-сайт на drupal связывается с базой данных, установленной на этом же сервере:

Другим распростаренным примером использования виртуальных сетевых интерфейсов (loopback) в linux может быть их использование для целей построения виртуальных частных сетей — VPN. Вы наверняка слышали о таких технологиях как OpenVPN, GRE, WireGuard и т.д. Каждый из этих демонов создает виртуальный сетевой интерфейс который служит для прозрачной маршрутизации данных между узлами, находящимися на удалении друг от друга и не имеющих возможности прямого взаимодействия. Рассмотрим общую сетевую топологию на примере OpenVPN:

От используемого драйвера зависит тип интерфейса, его скорость, допустимый размер MTU и т. д. Совсем даже не обязательно, что загружать драйвер в ядро вам придется самостоятельно. Скорее всего, создавая интерфейс нужного типа, система сама подберет и загрузит требуемый драйвер. Вам лишь останется сконфигурировать уже работающий loopback интерфейс. В данной статье мы рассмотрим 3 возможных на конец 2016 года типа виртуальных интерфейсов в linux: tun, tap и dummy. Отличие интерфейсов tun и tap заключается в том, что tap старается больше походить на реальный сетевой интерфейс, а именно он позволяет себе принимать и отправлять ARP запросы, обладает MAC адресом и может являться одним из интерфейсов сетевого моста, так как он обладает полной поддержкой ethernet — протокола канального уровня (уровень 2). Интерфейс tun этой поддержки лишен, поэтому он может принимать и отправлять только IP пакеты и никак не ethernet кадры. Он не обладает MAC-адресом и не может быть добавлен в бридж. Зато он более легкий и быстрый за счет отсутствия дополнительной инкапсуляции и прекрасно подходит для тестирования сетевого стека или построения виртуальных частных сетей (VPN). Виртуальный интерфейс типа dummy очень похож на tap, разница лишь в том, что он реализуется другим модулем ядра.

Создаем виртуальный интерфейс в linux вручную

Создавать и удалять интерфейсы, назначать IP и MAC адреса, изменять MTU и многое другое нам помогает утилита ip. Пользоваться ip удобно и легко, но помните, что произведенные изменения будут потеряны после перезагрузки компьютера. Используйте ip в целях тестирования.

Читайте также:  Не ставится фон рабочего стола windows 10

Создаем интерфейс типа tun

ip tuntap add dev tun0 mode tun
ip address add 192.168.99.1/30 dev tun0
ip address show tun0
2: tun0:

mtu 1500 qdisc noop state DOWN group default qlen 500
link/none
inet 192.168.99.1/30 scope global tun0
valid_lft forever preferred_lft forever

Как видим у нас теперь есть виртуальный интерфейс с именем «tun0», у него есть IP-адрес, и ни слова о MAC-адресе — всё, как мы и рассчитывали. Его уже можно пинговать, и на нем уже можно запускать слушающие сервисы. Но что будет, если мы попытаемся добавить этот интерфейс в бридж?

ip link set dev tun0 master br0
RTNETLINK answers: Invalid argument

Команда ip логичным образом выдала ошибку — нет никакого смысла добавлять в бридж интерфейс, не обладающий поддержкой ethernet.

Создаем интерфейс типа tap

ip tuntap add dev tap0 mode tap
ip address add 192.168.99.5/30 dev tap0
ip address show tap0
3: tap0:
mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether d6:1c:67:cd:6f:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.99.5/30 scope global tap0
valid_lft forever preferred_lft forever

У нас теперь появился новый виртуальный интерфейс с именем «tap0», у него есть как IP-адрес, так и MAC-адреса. Его также можно пинговать, и на нем также можно запускать слушающие сервисы. Команда, добавляющая интерфейс в бридж уже не выдаст ошибку, потому что это интерфейс, обладающий поддержкой ethernet:

ip link set dev tap0 master br0

Создаем интерфейс типа dummy

ip link add dev dum0 type dummy
ip address add 192.168.99.9/30 dev dum0
ip address show dum0
4: dum0:
mtu 1500 qdisc noop master br0 state DOWN group default qlen 1000
link/ether 1a:37:3b:0f:da:be brd ff:ff:ff:ff:ff:ff
inet 192.168.99.9/30 scope global dum0
valid_lft forever preferred_lft forever

Вы наверняка заметили, что команда для добавления интерфейса изменилась. Ничего необычного. Так написана утилита «ip». Ну и конечно, виртуальный интерфейс типа dummy можно легко добавить в бридж:

ip link set dev dum0 master br0

Создаем виртуальный интерфейс в linux с помощью systemd-networkd

В systemd-networkd за создание интерфейсов отвечают одни конфигурационные файлы, имеющие суффикс «.netdev», а за их настройку другие, имеющие суффикс «.network». Соответственно нам понадобиться в /etc/systemd/network создать по паре конфигурационных файлов для каждого из исследуемых типов интерфейсов

Создаем интерфейс типа tun

Создадим соответственно файлы tun0.netdev с содержимым:

[NetDev]
Name=tun0
Kind=tun

Создаем интерфейс типа tap

Создадим соответственно файлы tap0.netdev с содержимым:

[NetDev]
Name=tap0
Kind=tap

Создаем интерфейс типа dummy

Создадим соответственно файлы dum0.netdev с содержимым:

[NetDev]
Name=dum0
Kind=dummy

Стоит отметить, что если вы планируете маршрутизировать траффик через виртуальные интерфейсы ( а, используя их для цели создания виртуальных частных сетей (VPN), вы точно этого хотите), то в конфигурационный файл в секии «Network» следует добавить диррективу «IPForward=yes».

Источник

Для чего нужен сетевой интерфейс tun?

Я заметил при запуске ifconfig, что есть сетевой интерфейс с именем tun0 и он имеет адрес ipv4. Небольшое исследование показывает, что это туннельное устройство, но я не знаю, как оно используется, что его использует и почему у него есть IP-адрес.

У меня действительно включен iptables, и, кажется, есть какая-то связь между iptables и tun, если это помогает.

Это для программного обеспечения для туннелирования. См. Статью в Википедии под названием: TUN / TAP для более подробной информации.

Читайте также:  Как установить линукс для флешки

выдержка из страницы руководства по FreeBSD

Интерфейс tun представляет собой программный петлевой механизм, который можно свободно описать как аналог сетевого интерфейса pty (4), то есть tun делает для сетевых интерфейсов то же, что драйвер pty (4) для терминалов.

Эта socat страница документации показывает, как их можно использовать.

выдержка из документа «Сокат»

Некоторые операционные системы позволяют создавать виртуальные сетевые интерфейсы, которые подключаются не к проводной сети, а к процессу, имитирующему сеть. Часто эти устройства называются TUN или TAP.

Ссылки

Как уже писал @slm, интерфейс TUN представляет собой программную петлю, которая эмулирует сетевой интерфейс так же, как интерфейс TAP. С практической точки зрения интерфейс TUN — это эмуляция интерфейса уровня 3 . То есть это устройство эмуляции сетевого уровня, которое может туннелировать пакеты данных различной природы, будь то необработанные TCP, UDP, SCTP или инкапсулированные пакеты, такие как PPP, PPTP, AH / IPSEC, что угодно. С другой стороны, интерфейс TAP — это эмуляция интерфейса уровня 2 , то есть это устройство эмуляции канала передачи данных, которое может работать как сырой Ethernet, Arcnet, Token Ring и т. Д.

Это имеет разные практические последствия. Например, при проектировании брандмауэра, если вы хотите создать внутреннюю сеть с NAT и немаршрутизируемые адреса, вы должны использовать интерфейсы TUN для создания моста фильтрации. Если у вас есть набор общедоступных IP-адресов, которые вы можете назначить внутренним хостам, но при этом все же хотите защищать весь трафик брандмауэром, вы должны использовать интерфейсы TAP для эмуляции моста Ethernet, по которому фильтруются пакеты данных. Это, между прочим, является основой того, что называют «прозрачным межсетевым экраном».

Источник

VPN-канал с помощью OpenSSH. Часть третья

Мы посмотрели, как можно завернуть весь трафик одного компьютера в защищенный туннель. Теперь посмотрим, как можно направить в туннель трафик всех компьютеров локальной сети. Итак, у нас есть сервер с белым ip-адресом 123.123.123.123 , несколько компьютеров в сети 192.168.250.0/24 и маршрутизатор, который обеспечивает для этих компов выход в интернет.

Для простоты будем считать, что у нас есть физический доступ к маршрутизатору gateway и настройку сервера будем выполнять с него. Для этого настроим аутентификацию по ключу на сервере для пользователя evgeniy .

Вход на сервер по ключу

Создаем ключи на маршрутизаторе для пользователя evgeniy :

Копируем публичный ключ на сервер:

Проверяем аутентификацию по ключу:

Настройка сервера

1. Добавляем пользователя ssh-vpn

Создаем пользователя ssh-vpn :

2. Настройки OpenSSH сервера

Изменяем настройки ssh-сервера:

3. Создаем TUN устройство при загрузке

Теперь нужно добавить TUN устройство при загрузке системы, которое будет доступно для чтения и записи пользователю ssh-vpn .

Здесь мы указываем маршрут до подсети 192.168.250.0/24 для интерфейса tun0 — пакеты надо отправлять через шлюз 192.168.200.2 . Другими словами — отправлять пакеты на интерфейс tun0 маршрутизатора gateway . Маршрутизатор перекинет эти пакеты с интерфейса tun0 на интерфейс enp0s8 и отправит дальше — компьютеру pc1 или pc2 .

4. Пересылка пакетов tun0→ens3 и ens3→tun0

Маршрутизатор будет направлять трафик в туннель, но что делать с этим трафиком — сервер пока не знает. Нужно включить пересылку пакетов между интерфейсами tun0 и ens3 .

Теперь добавим SNAT (подмена адреса источника), что позволит всем компьютерам подсети 192.168.250.0/24 выходить в интернет, используя единственный ip-адрес 123.123.123.123 .

Правила мы добавили, но они пропадут при перезагрузке сервера. Так что их нужно сохранить и восстанавливать при перезагрузке. В этом нам поможет пакет iptables-persistent , который добавит новую службу netfilter-persistent.service :

При установке пакета будет предложено сохранить текущие правила iptables :

  • в файл /etc/iptables/rules.v4 для протокола IPv4
  • в файл /etc/iptables/rules.v6 для протокола IPv6
Читайте также:  Рекомендуемые средства устранения неполадок windows 10

5. Перезагружаем сервер

Перезагружаем сервер и смотрим сетевые интерфейсы, маршруты и правила форвардинга:

На самом деле такой вывод команды ip addr будет только после того, как мы настроим маршрутизатор gateway . А в этот момент интерфейс tun0 будет выключен, потому что туннель еще не создан. Но мы это скоро исправим.

Красным выделены маршруты, которые были добавлены при создании TUN устройства.

Настройка маршрутизатора

Перед настройкой нужно сделать небольшое лирическое отступление. Если бы мы просто настраивали маршрутизатор, нам нужно было включить пересылку пакетов между интерфейсами, создать несколько правил для netfilter с помошью утилиты iptables и добавить SNAT:

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

1. Сетевые интерфейсы и форвардинг

Сначала настраиваем сетевые интерфейсы:

Пересылка пакетов между интерфейсами по умолчанию отключена, так что редактируем файл /etc/sysctl.conf :

После этого настраиваем netfilter с помощью утилиты iptables :

Правила мы добавили, но они пропадут при перезагрузке сервера. Так что их нужно сохранить и восстанавливать при перезагрузке. В этом нам поможет пакет iptables-persistent , который добавит новую службу netfilter-persistent.service :

При установке пакета будет предложено сохранить текущие правила iptables :

  • в файл /etc/iptables/rules.v4 для протокола IPv4
  • в файл /etc/iptables/rules.v6 для протокола IPv6

2. Создание пользователя ssh-vpn

Создаем пользователя ssh-vpn :

Создаем публичный и приватный ключи:

Теперь нам надо скопировать публичный ключ на сервер с помощью команды scp . Но у нас нет доступа для пользователя evgeniy :

  • к директории /home/ssh-vpn/.ssh/ на маршрутизаторе
  • к директории /home/ssh-vpn/.ssh/ на сервере

Изменяем права на директорию /home/ssh-vpn/.ssh/ на маршрутизаторе:

Изменяем права на директорию /home/ssh-vpn/.ssh/ на сервере:

Копируем от имени пользователя evgeniy публичный ключ на сервер:

Возвращаем обратно права на директорию на маршрутизаторе:

Задаем владельца и права для файла authorized_keys на сервере:

Возвращаем обратно права на директорию на сервере:

И надо обязательно выполнить вход по ssh на сервер от имени пользователя ssh-vpn с маршрутизатора, чтобы был создан файл known_hosts . Иначе потом, при автоматическом создании туннеля в момент загрузки gateway , получим сообщение об ошибке «Host key verification failed».

3. Создаем TUN устройство при загрузке

Теперь нужно добавить TUN устройство при загрузке системы, которое будет доступно для чтения и записи пользователю ssh-vpn .

4. Создаем туннель при загрузке

Для этого нам нужна служба, которая будет создавать туннель при загрузке системы. Кроме того, при обрыве связи эта служба будет пытаться снова установить соединение.

Сообщаем системе про новый unit-файл:

Добавляем новую службу в автозагрузку:

5. Заворачиваем трафик в туннель

Чтобы перенаправить весь трафик подсети 192.168.250.0/24 через туннель, нужно вместо старого шлюза — 192.168.150.1 (через интерфейс enp0s3 ) указать новый — 192.168.200.1 (через интерфейс tun0 ). Но при этом потеряется связь с сервером — поэтому перед заменой шлюза нужно добавить маршрут до сервера.

Но эти два маршрута пропадут при перезагрузке системы, так что добавим две новые службы:

Сообщим системе про два новых unit-файла:

Добавляем новые службы в автозагрузку:

6. Перезагружаем маршрутизатор

Перезагружаем маршрутизатор, чтобы добавить TUN-устройство, создать SSH-туннель и завернуть трафик клиента в туннель:

После этого смотрим сетевые интерфейсы, маршруты и правила форвардинга:

Красным выделены маршруты, которые мы добавили. А зеленым — маршрут, который был добавлен при создании TUN-устройства.

Теперь все готово

Теперь все готово, так что открываем на компьютере pc1 браузер и смотрим свой ip-адрес:

Источник

Оцените статью