Нетегированный интерфейс в Linux?

Не могли бы вы указать ошибку? что вы получаете после выполнения, потому что скрипт у меня работает. Здесь есть тот же вопрос, на который ответят с использованием php и perl :

Выходной URL-адрес открытых вкладок firefox в терминале

Поскольку основная часть в python, здесь чисто python, чтобы сделать то же самое, попробуйте его:

    #!/usr/bin/python
    import json
    f = open("recovery.js","r")
    jdata = json.loads(f.read())
    f.close()

    number_of_selected_tab = jdata["windows"][0]["selected"]

    tab_number = 1
    for win in jdata.get("windows"):
        for tab in win.get("tabs"):
            if number_of_selected_tab == tab_number :
                tab_index = tab.get("index") - 1
                print tab.get("entries")[tab_index].get("url")
            tab_number = tab_number + 1

Я заменил файл /home/username/.mozilla/firefox/xxxxx.default/sessionstore.js на recovery.js . В моем случае (Mozilla Firefox 44.0, openSUSE 13.1) это файл ~ / .mozilla / firefox / *. Default / sessionstore-backups / recovery.js . И последнее, но не менее важное: сценарий не работает, если у вас запущено два экземпляра Firefox .

4
13.07.2015, 08:46
3 ответа

это:

# ip link add link eth0 name untagged type vlan id 0

, похоже, помогает.

tcpdump на родительском интерфейсе (eth0) показывает непомеченные пакеты, когда вы пингует -I untagged (some-ip).

(tcpdump на новом логическом интерфейсе должен отображать только нетегированный трафик, тогда как tcpdump на родительском интерфейсе должен отображать весь трафик, помеченный и немаркированный, с заголовками 802.1q для помеченного материала.)

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

# ip link set eth0 arp off
# ip link set untagged arp on

я бы также отключил локальные адреса связи IPv6 на родительском интерфейсе и включил бы на немаркированном логическом интерфейсе навсегда мера.

вы можете повышать / понижать нетегированный интерфейс, не уничтожая весь родительский интерфейс (включая тегированный трафик) и т. Д.

3
27.01.2020, 20:48

Я обнаружил, что работает следующий метод.

  • Используйте TC для сопоставления пакетов без 802.1q на входящем входе и отправьте заголовок vlan с идентификатором 0
  • Используйте TC для сопоставления пакетов в vlan 0 на выходе и вставьте заголовок vlan
  • Создайте нетегированный логический интерфейс с типом = vlan and id = 0

Вот пример:

$ tc qdisc del dev eth0 root
$ tc qdisc add dev eth0 handle 1: root prio
$ tc filter add dev eth0 parent 1: protocol 802.1q basic match 'meta(vlan eq 0)' action vlan pop

$ tc qdisc del dev eth0 ingress
$ tc qdisc add dev eth0 handle ffff: ingress
$ tc filter add dev eth0 parent ffff: protocol all basic match 'not meta(protocol eq 0x8100)' action vlan push id 0

$ ip link add eth0-vlan0 type vlan id 0
$ ip link set eth0-vlan0 up
$ ip addr add 192.168.10.253/24 dev eth0-vlan0

peer$ ping 192.168.10.253
PING 192.168.10.253 (192.168.10.253) 56(84) bytes of data.
64 bytes from 192.168.10.253: icmp_seq=1 ttl=64 time=0.209 ms
64 bytes from 192.168.10.253: icmp_seq=2 ttl=64 time=0.188 ms
^C

Обратите внимание, что добавление prio qdisc на выходе (известное как «root» выше) отключает стандартную дисциплину mq, которая разделяет пакеты в соответствии с количеством очередей передачи на сетевом адаптере. чтобы позволить нескольким потокам ЦП проталкивать пакеты в разные очереди TX. Чтобы восстановить поведение по умолчанию, используйте mqprio следующим образом:

$ tx_q_count=$(ls -d /sys/class/net/eth0/queues/tx-* | wc -l)

$ tc qdisc del dev eth0 root
$ tc qdisc add dev eth0 handle 1: root prio bands $tx_q_count multiqueue
$ tc filter add dev eth0 parent 1: protocol 802.1q basic match 'meta(vlan eq 0)' action vlan pop
$ for i in $(seq 1 $tx_q_count); do tc qdisc add dev eth0 parent 1:$i pfifo_fast; done

$ tc qdisc del dev eth0 ingress
$ tc qdisc add dev eth0 handle ffff: ingress
$ tc filter add dev eth0 parent ffff: protocol all basic match 'not meta(protocol eq 0x8100)' action vlan push id 0

$ ip link add eth0-vlan0 type vlan id 0
$ ip link set eth0-vlan0 up
$ ip addr add 192.168.10.253/24 dev eth0-vlan0

peer$ ping 192.168.10.253
PING 192.168.10.253 (192.168.10.253) 56(84) bytes of data.
64 bytes from 192.168.10.253: icmp_seq=1 ttl=64 time=0.230 ms
64 bytes from 192.168.10.253: icmp_seq=2 ttl=64 time=0.198 ms
^C

Другое решение, которое также работает, - это добавить программный мост рядом с логическими интерфейсами vlan на физическом интерфейсе. Программный мост имеет функцию фильтрации vlan, которая позволяет использовать ограниченное переназначение vlan (pvid-> vid на входящем и vid-> pvid на выходе, но не полное переназначение). Вот пример:

$ ip link add eth0-vlan0 type bridge
$ echo 0 > /sys/class/net/eth0-vlan0/bridge/default_pvid
$ echo 1 > /sys/class/net/eth0-vlan0/bridge/vlan_filtering
$ ip link set dev eth0 master eth0-vlan0
$ bridge vlan add vid 4094 dev eth0 pvid untagged
$ bridge vlan add vid 4094 dev eth0-vlan0 untagged pvid self

$ ip link add eth0-vlan4094 link eth0 type vlan id 4094
# ... BEGIN: only if you intend to use vlan 4094 ...
$ ip link set eth0-vlan4094 up
$ ip addr add 10.10.40.253/24 dev eth0-vlan4094
# ... END ...

$ ip link set eth0-vlan0 up
$ ip addr add 192.168.10.253/24 dev eth0-vlan0

peer$ ping 192.168.10.253
PING 192.168.10.253 (192.168.10.253) 56(84) bytes of data.
64 bytes from 192.168.10.253: icmp_seq=1 ttl=64 time=0.238 ms
64 bytes from 192.168.10.253: icmp_seq=2 ttl=64 time=0.215 ms
^C

Вам нужен интерфейс VLAN, соответствующий номеру VID, используемому внутри моста, потому что функция фильтрации VLAN немного так себе. Он принимает оба немаркированных кадра с использованием сопоставления pvid-> vid, но также принимает кадры с тегом VLAN на проводе, совпадающим с переназначенным vid. Вместо этого интерфейс VLAN съедает эти кадры. Оставьте его в выключенном состоянии, если вам не нужна эта конкретная VLAN.

Программный мост недавно получил функцию "default_pvid", которая заставляет его работать как дешевые аппаратные коммутаторы: он поддерживает vlan, но по умолчанию выполняет сопоставление pvid-> vid с vid 1 и разрешает vid 1 на всех портах. , чтобы вы могли подключить коммутатор и начать использовать порты для немаркированного трафика без единой директивы конфигурации.

Наконец, более современным решением было бы использовать tc_clsact и написать небольшую программу BPF для вставки / вставки тегов для PVID. Работает так же, как приведенный выше пример TC, за исключением того, что некоторые сетевые адаптеры позволяют аппаратно разгрузить программы BPF, поэтому он может быть более производительным.

6
27.01.2020, 20:48

Вот решение с использованием eBPF.

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

$ base64 -d > tag-native-vlan0.o
f0VMRgIBAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAALABAAAAAAAAAAAAAEAAAAAA
AEAABwABAGESFAAAAAAAVQIDAAAAAAC3AgAAAIEAALcDAAAAAAAAhQAAABIAAAC3AAAAAAAAAJUA
AAAAAAAAYRIUAAAAAAAVAgMAAAAAAGESGAAAAAAAVQIBAAAAAACFAAAAEwAAALcAAAAAAAAAlQAA
AAAAAABHUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAAAAAAMAKAAAAAAAAAAAAAAA
AAAAAFcAAAAAAAQAKAAAAAAAAAAAAAAAAAAAAD0AAAAQAAUAAAAAAAAAAAAAAAAAAAAAACMAAAAQ
AAQAAAAAAAAAAAAAAAAAAAAAAAcAAAAQAAMAAAAAAAAAAAAAAAAAAAAAAAAudGV4dABjbHNhY3Rf
aW5ncmVzcwBwdmlkX2luZ3Jlc3MAY2xzYWN0X2VncmVzcwBwdmlkX2VncmVzcwBfX2xpY2Vuc2UA
LnN0cnRhYgAuc3ltdGFiAExCQjFfMwBMQkIwXzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEcAAAADAAAAAAAAAAAAAAAA
AAAAAAAAAEgBAAAAAAAAZQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAYA
AAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFgAA
AAEAAAAGAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAA
AAAAADEAAAABAAAABgAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAgAAAAA
AAAAAAAAAAAAAAA/AAAAAQAAAAMAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAQAAAAAAAAAAAAAAAAA
AAABAAAAAAAAAAAAAAAAAAAATwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAuAAAAAAAAACQAAAAAAAA
AAEAAAADAAAACAAAAAAAAAAYAAAAAAAAAA==
^D

Я без особой причины установил PVID для сопоставления с VID 0 вместо VID 10.

(Чтобы изменить его на VID 10, используйте дизассемблер и ассемблер, например ubpf или llvm-objdump, в файле .o и измените тег VLAN. Вы также можете общаться с eBPF из пользовательского пространства, поэтому он должен

Убедитесь, что вы запустили что-то вроде ядра 4.8.0 ( uname -a ) и iproute2 4.9.0 ( ip -V ).

Добавьте eBPF к физическому интерфейсу:

$ tc qdisc add dev eth0 clsact
$ tc filter add dev eth0 ingress bpf object-file tag-native-vlan0.o section pvid_ingress
$ tc filter add dev eth0 egress bpf object-file tag-native-vlan0.o section pvid_egress

Создайте логический интерфейс:

$ ip link add eth0-vlan0 link eth0 type vlan id 0
$ ip link set eth0-vlan0 up
$ ip addr add 192.168.10.253/24 dev eth0-vlan0

L3 настроен на логическом интерфейсе, а физический интерфейс используется для L2.

Тест из подключенного бокса:

peer$ ping 192.168.10.253
PING 192.168.10.253 (192.168.10.253) 56(84) bytes of data.
64 bytes from 192.168.10.253: icmp_seq=1 ttl=64 time=0.380 ms
64 bytes from 192.168.10.253: icmp_seq=2 ttl=64 time=0.240 ms
^C

И вот он, «немаркированный интерфейс в Linux».

-2
27.01.2020, 20:48

Теги

Похожие вопросы