Ссылки:
1 2 |
https://segmentfault.com/a/1190000009249039 https://segmentfault.com/a/1190000009251098 |
dummy
1 2 3 4 5 6 7 8 |
!!! не актуально Зачем? для 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
+----------------------------------------------------------------+ | | | +--------------------+ +--------------------+ | | | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
+----------------------------------------------------------------+ | | | +------------------------------------------------+ | | | Newwork Protocol Stack | | | +------------------------------------------------+ | | ^ ^ ^ | |..............|...............|...............|.................| | v v v | | +----------+ +-----------+ +-----------+ | | | eth0 | | veth0 | | veth1 | | | +----------+ +-----------+ +-----------+ | |192.168.1.11 ^ ^ ^ | | | +---------------+ | | | 192.168.2.11 192.168.2.1 | +--------------|-------------------------------------------------+ v Physical Network |
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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
1 2 3 4 5 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Отличие интерфейсов 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
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 ------------------------------------- |