Назад | Перейти на главную страницу

Прозрачный Ethernet через GRE без пересылки трафика

Я работаю в Linux 2.6.30.9 и пытаюсь настроить прозрачный Ethernet через туннель GRE. Используемая сетевая топология следующая:

Я хочу соединить ПК1 и ПК2 с помощью прозрачного Ethernet через GRE. RouterA подключен к Интернету через ppp0 как RouterB. Оба подключения к Интернету являются PPPOE (PVC PPPoEoA).

Итак, я делаю:

В RouterA (linux 2.6.30.9):

ip link add testgre type gretap remote 193.152.243.206 local 95.121.205.77 ttl 255
brctl addif br0 testgre
ip link set testgre up

В RouterB (linux 2.6.30.9):

ip link add testgre type gretap remote 95.121.205.77 local 193.152.243.206 ttl 255
brctl addif br0 testgre
ip link set testgre up

Некоторые команды выводят:

В RouterA (аналогичный вывод в RouterB):

# ip link show testgre
36: testgre: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1442 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 5f:79:cd:4d:c6:57 brd c1:98:f3:ce:ff:ff

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.5f79cd4dc657       no              eth0.5
                                                        eth0.4
                                                        eth0.3
                                                        eth0.2
                                                        wlan0
                                                        testgre

Затем я делаю запрос PING с ПК1 на ПК2:

ping 192.168.1.33

Я запускаю tcpdump в RouterA и вижу кадр запроса ARP поверх ppp0 (файл pcap открыт с помощью Wirehark):

Я запускаю tcpdump в RouterB, подключенном к ppp1, и вижу, что запрос ARP прибыл, но не пересылается на L2 на ПК2. Я не вижу запроса ARP на ПК2.

Я пытаюсь использовать статические записи ARP, но запрос ICMP имеет ту же проблему, он не пересылается на ПК2.

Нет правил ebtables. Ни правил iptables (действие по умолчанию - ACCEPT для ebtables и iptables). Должен ли я добавить ppp0 в интерфейс моста или что-то в этом роде? Любые предложения приветствуются.

Проблема была связана с вопросом, который я задал здесь, о сбое сервера. IP / GRE скомпилирован в ядре, но интерфейс gre0 не существует.

Я решил первый вопрос, впустив драйвер демультиплексора GRE в gre.c зарегистрировать обработчик протокола GRE в ядре. Но я обнаружил, что когда приходит пакет GRE, обработчик GRE не указывает ни на что ip_gre.c функция (драйвер демультиплексора GRE предназначен для проверки версии GRE в пакете и передачи ведра правильному обработчику протокола, но в моем случае он указывает NULL).

Я прокомментировал фрагмент кода, где gre.c регистрирует обработчик протокола GRE, и я раскомментировал фрагмент кода, в котором ip_gre.c регистрирует обработчик протокола GRE. Теперь, когда приходит пакет GRE, он хорошо декапсулируется и передается на следующий уровень, теперь я могу без проблем пинговать с ПК1 на ПК2. Я думаю, что эта проблема возникает у многих людей на их встроенных устройствах, потому что я искал в Google сообщение об ошибке https://www.google.com/search?q=ipgre+init%3A+can%27t+add+protocol когда драйвер IP GRE не может запуститься, потому что драйвер демультиплексора GRE еще зарегистрировал обработчик GRE, и я обнаружил несколько устройств с этой ошибкой.