Ссылки:
https://segmentfault.com/a/1190000009249039 https://segmentfault.com/a/1190000009251098
dummy
!!! не актуально Зачем? для loopback как на свитчах\роутерах когда есть много маршрутов, в теории на такой интерфейс можно будет достучатся, можно присвоить ему отдельный адрес и анонсировать его остальной сети через протокол OSPF (Open Shortest Path First), который использует multicast и не зависит от конкретных адресов интерфейсов. В этом случае адрес на loopback останется доступным, если у маршрутизатора есть хотя бы один живой канал в остальную сеть. ip link add name dum0 type dummy ip link set dum0 up ip address add 192.0.2.10/32 dev dum0
tun/tap
+----------------------------------------------------------------+
| |
| +--------------------+ +--------------------+ |
| | User Application A | | User Application B |<-----+ |
| +--------------------+ +--------------------+ | |
| | 1 | 5 | |
|...............|......................|...................|.....|
| v v | |
| +----------+ +----------+ | |
| | socket A | | socket B | | |
| +----------+ +----------+ | |
| | 2 | 6 | |
|.................|.................|......................|.....|
| v v | |
| +------------------------+ 4 | |
| | Newwork Protocol Stack | | |
| +------------------------+ | |
| | 7 | 3 | |
|................|...................|.....................|.....|
| v v | |
| +----------------+ +----------------+ | |
| | eth0 | | tun0 | | |
| +----------------+ +----------------+ | |
| 10.32.0.11 | | 192.168.3.11 | |
| | 8 +---------------------+ |
| | |
+----------------|-----------------------------------------------+
v
Physical Network
veth
+----------------------------------------------------------------+
| |
| +------------------------------------------------+ |
| | Newwork Protocol Stack | |
| +------------------------------------------------+ |
| ^ ^ ^ |
|..............|...............|...............|.................|
| v v v |
| +----------+ +-----------+ +-----------+ |
| | eth0 | | veth0 | | veth1 | |
| +----------+ +-----------+ +-----------+ |
|192.168.1.11 ^ ^ ^ |
| | +---------------+ |
| | 192.168.2.11 192.168.2.1 |
+--------------|-------------------------------------------------+
v
Physical Network
Пример:
ip link add veth0 type veth peer name veth1 ip addr add 192.168.2.11/24 dev veth0 ip link set veth0 up ip link set veth1 up ping -c 4 192.168.2.1 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. From 192.168.2.11 icmp_seq=1 Destination Host Unreachable ip addr add 192.168.2.1/24 dev veth1 ping -c 4 192.168.2.1 -I veth0 PING 192.168.2.1 (192.168.2.1) from 192.168.2.11 veth0: 56(84) bytes of data. 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.032 ms 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=0.048 ms
rp_filters
echo 1 > /proc/sys/net/ipv4/conf/veth1/accept_local echo 1 > /proc/sys/net/ipv4/conf/veth0/accept_local echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter echo 0 > /proc/sys/net/ipv4/conf/veth0/rp_filter echo 0 > /proc/sys/net/ipv4/conf/veth1/rp_filter
Виртуальных интерфейсы: tun, tap и dummy
Отличие интерфейсов tun и tap заключается в том, что tap старается больше походить на реальный сетевой интерфейс, а именно он позволяет себе принимать и отправлять ARP запросы, обладает MAC адресом и может являться одним из интерфейсов сетевого моста, так как он обладает полной поддержкой ethernet - протокола канального уровня (уровень 2). Интерфейс tun этой поддержки лишен, поэтому он может принимать и отправлять только IP пакеты и никак не ethernet кадры. Он не обладает MAC-адресом и не может быть добавлен в бридж. Зато он более легкий и быстрый за счет отсутствия дополнительной инкапсуляции и прекрасно подходит для тестирования сетевого стека или построения виртуальных частных сетей (VPN). Виртуальный интерфейс типа dummy очень похож на tap, разница лишь в том, что он реализуется другим модулем ядра. Создаем интерфейс типа tun вручную и на время(жить будет до перезагрузки): ip tuntap add dev tun0 mode tun ip address add 10.0.0.1/30 dev tun0 ip address show tun0 !!! Внимание tun интерфейс невозможно добавить в бриджи (так как он не имеет MAC) Собственно при попытки добавить tun в бридж будет ошибка: ip link set dev tun0 master br0 RTNETLINK answers: Invalid argument Создаем интерфейс типа tap вручную и на время(жить будет до перезагрузки): ip tuntap add dev tap0 mode tap ip address add 10.0.0.5/30 dev tap0 ip address show tap0 В бридж tap добавляется без проблем: ip link set dev tap0 master br0 Создаем интерфейс типа dumm вручную и на время(жить будет до перезагрузки): ip link add dev dum0 type dummy ip address add 10.0.0.7/30 dev dum0 ip address show dum0 В бридж dumm добавляется без проблем: ip link set dev dum0 master br0 P.S. Стоит отметить, что если вы планируете маршрутизировать траффик через виртуальные интерфейсы ( а, используя их для цели создания виртуальных частных сетей (VPN), вы точно этого хотите), то в конфигурационный файл в секции "Network" следует добавить директиву "IPForward=yes".
Примеры конфигов для systemd:
TUN: vim /etc/systemd/network/tun0.netdev ------------------------------------ [NetDev] Name=tun0 Kind=tun ------------------------------------ vim /etc/systemd/network/tun0.netdev ------------------------------------ [Match] Name=tun0 [Network] Address=10.0.0.1/30 ------------------------------------ TAP: vim /etc/systemd/network/tap0.netdev ------------------------------------ [NetDev] Name=tap0 Kind=tap ------------------------------------ vim /etc/systemd/network/tap0.network ------------------------------------- [Match] Name=tap0 [Network] Address=10.0.0.5/30 ------------------------------------- DUMMY: vim /etc/systemd/network/dum0.netdev ------------------------------------ [NetDev] Name=dum0 Kind=dummy ------------------------------------ vim /etc/systemd/network/dum0.network ------------------------------------- [Match] Name=dum0 [Network] Address=10.0.0.7/30 -------------------------------------