Temat: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Witam,
na wstępie zaznaczę, że nie wiem czy to jest odpowiedni dział. Niby związane, a jednak nie całkiem... big_smile

Posiadam TP-LINK-WR740N niedawno nabyte, tylko po to by przetestować pewną konfigurację sieciową. Pracuje pod OpenWrt 18.06.5 r7897-9d401013fc. Aktulanie sieć wygląda tak:

Serwer DHCP (10.0.0.1) <----1----> TP-LINK<----2---->PC
1: 10.0.0.0/24, TP-LINK odbiera IP z DHCP
2: 192.168.1.0/24, TP-LINK ma 192.168.1.1 i jest serwerem DHCP, PC odbiera IP po DHCP

Chciałbym, aby zamiast TP-LINKa, który odbiera jakieś IP, to IP odbierało PC bezpośrednio (czyli dosłownie tak, jakbym PC podpiął do 1):
Serwer DHCP<-------->PC,
ale tak, by TP-LNIK pozostał w sieci, bez przełączania żadnych kabli.
Naturalnie, chciałem to zrobić z brctl, żeby zbridgować oba urządzenia na L2. Ta konfiguracja kompletnie wyelminiuje dostęp to TP-LINKa, a otworzy dostęp do sieci 1. Niestety, pakiety nie były poprawnie przekazywane w obrębie samego bridga, od serwera macierzystego po requsetcie, po przełączeniu z sieci do sieci dostawałem NAK, ale za to po discover nie dostawałem ACK, nie wiem dlaczego, więc spróbowałem takiego czegoś:

uci network:

network.loopback=interface
network.loopback.ifname='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.globals=globals
network.lan=interface
network.lan.ifname='eth0.1'
network.lan.proto='static'
network.lan.ipaddr='192.168.1.1'
network.lan.netmask='255.255.255.0'
network.lan.delegate='0'
network.@switch[0]=switch
network.@switch[0].name='switch0'
network.@switch[0].reset='1'
network.@switch[0].enable_vlan='1'
network.@switch_vlan[0]=switch_vlan
network.@switch_vlan[0].device='switch0'
network.@switch_vlan[0].vlan='1'
network.@switch_vlan[0].vid='1'
network.@switch_vlan[0].ports='0t 2 4'
network.@switch_vlan[1]=switch_vlan
network.@switch_vlan[1].device='switch0'
network.@switch_vlan[1].vlan='2'
network.@switch_vlan[1].vid='2'
network.@switch_vlan[1].ports='0t 1'
network.@switch_vlan[2]=switch_vlan
network.@switch_vlan[2].device='switch0'
network.@switch_vlan[2].vlan='3'
network.@switch_vlan[2].vid='3'
network.@switch_vlan[2].ports='0t 3'
network.@switch_vlan[3]=switch_vlan
network.@switch_vlan[3].device='switch0'
network.@switch_vlan[3].vlan='4'
network.@switch_vlan[3].vid='4'
network.DIRECT=interface
network.DIRECT.type='bridge'
network.DIRECT.proto='none'
network.DIRECT.ifname='eth0.2 eth0.3'
network.DIRECT.delegate='0'
network.DIRECT.force_link='1'
network.DIRECT.macaddr='XX:XX:XX:XX:XX:XX'
network.DIRECT.auto='0'

Pomiędzy portem 1 a 2 podłączyłem fizyczny kabelek.
Gdy podpinam się do portu 4, to jest sytuacja jak w 1. przypadku, gdzie wszystko działa (nie wychodzę poza TP-LINKa). Natomiast, podłączając się do 3, powinienem mieć również dostęp do 192.168.1.0/24 na poziome L2, a więc również komunikować się tak samo z DHCP, jak gdy jestem podłączony do portu 4.
Realnie jednak przechodzą tylko pakiety broadcast, router widzi request, ale PC nie widzi ACK:

...
Tue Nov  5 15:18:42 2019 daemon.info dnsmasq-dhcp[1157]: DHCPREQUEST(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY
Tue Nov  5 15:18:42 2019 daemon.info dnsmasq-dhcp[1157]: DHCPACK(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY PC_hostname
Tue Nov  5 15:18:50 2019 daemon.info dnsmasq-dhcp[1157]: DHCPREQUEST(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY
Tue Nov  5 15:18:50 2019 daemon.info dnsmasq-dhcp[1157]: DHCPACK(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY PC_hostname
Tue Nov  5 15:19:03 2019 daemon.info dnsmasq-dhcp[1157]: DHCPDISCOVER(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY
Tue Nov  5 15:19:03 2019 daemon.info dnsmasq-dhcp[1157]: DHCPOFFER(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY
Tue Nov  5 15:19:09 2019 daemon.info dnsmasq-dhcp[1157]: DHCPDISCOVER(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY
Tue Nov  5 15:19:09 2019 daemon.info dnsmasq-dhcp[1157]: DHCPOFFER(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY
Tue Nov  5 15:19:19 2019 daemon.info dnsmasq-dhcp[1157]: DHCPDISCOVER(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY
Tue Nov  5 15:19:19 2019 daemon.info dnsmasq-dhcp[1157]: DHCPOFFER(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY
Tue Nov  5 15:19:28 2019 daemon.info dnsmasq-dhcp[1157]: DHCPREQUEST(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY
Tue Nov  5 15:19:28 2019 daemon.info dnsmasq-dhcp[1157]: DHCPACK(eth0.1) 192.168.1.133 YY:YY:YY:YY:YY:YY PC_hostname
...

1. Co się popsuło?
2. Jak to poprawić?

PS: Dopiero teraz zauważyłem, gdy porty 1 i 2 są połączone, to DHCP nie odpowiada nawet na porcie 4, ale cały czas router odpowiada na L3. Czy utworzyła się jakaś pętla pomimo występowania vlanów?

2

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Utwórz bridge z interfejsów, nie rób tak adresów, wyłącz firewalla i serwer dhcp. Będzie całkowicie przezroczysty.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Firewall wyłączyłem już wcześniej, adresy zrobiłem losowe, serwer DHCP nie istnieje na br-DIRECT, config:

network.loopback=interface
network.loopback.ifname='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.globals=globals
network.lan=interface
network.lan.ifname='eth0.1'
network.lan.proto='static'
network.lan.ipaddr='192.168.1.1'
network.lan.netmask='255.255.255.0'
network.lan.delegate='0'
network.@switch[0]=switch
network.@switch[0].name='switch0'
network.@switch[0].reset='1'
network.@switch[0].enable_vlan='1'
network.@switch_vlan[0]=switch_vlan
network.@switch_vlan[0].device='switch0'
network.@switch_vlan[0].vlan='1'
network.@switch_vlan[0].vid='1'
network.@switch_vlan[0].ports='0t 2'
network.@switch_vlan[1]=switch_vlan
network.@switch_vlan[1].device='switch0'
network.@switch_vlan[1].vlan='2'
network.@switch_vlan[1].vid='2'
network.@switch_vlan[1].ports='0t 1'
network.@switch_vlan[2]=switch_vlan
network.@switch_vlan[2].device='switch0'
network.@switch_vlan[2].vlan='3'
network.@switch_vlan[2].vid='3'
network.@switch_vlan[2].ports='0t 3'
network.@switch_vlan[3]=switch_vlan
network.@switch_vlan[3].device='switch0'
network.@switch_vlan[3].vlan='4'
network.@switch_vlan[3].vid='4'
network.DIRECT=interface
network.DIRECT.type='bridge'
network.DIRECT.proto='none'
network.DIRECT.ifname='eth0.2 eth0.3'
network.DIRECT.delegate='0'
network.DIRECT.force_link='1'
network.DIRECT.macaddr='7A:BB:15:DC:2F:73'

Na porcie 2 dostęp do routera. Na 3 (PC) i 1 (10.0.0.0/24) zrobiłem bridge jak mówiłeś, bez DHCP, nadal nie przedostaje się nic za wyjątkiem broadcastu. Znowu dostaję NAK i nie dostaję ACK.

4

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Po prostu chcesz switcha zrobić tak?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5 (edytowany przez MrCiek4wski 2019-12-14 11:51:03)

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Tak, zgadza się, tyle że mając do dyspozycji wyłącznie brctl. Można oczywiście zrobić to nietagowanym vlanem, ale jak mówiłem ten TP-LINK jest tylko do testów. Router, który będzie w tej sieci nie ma obsługi 802.1q, ma tylko brctl z busyboxa.

6

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Więc tak prawdę mówić nic nie musisz zrobić.

network.@switch_vlan[1]=switch_vlan
network.@switch_vlan[1].device='switch0'
network.@switch_vlan[1].vlan='2'
network.@switch_vlan[1].ports='0t 1 3'

Nawet interfejsu nie musisz robić na tym eth0.2. Musi działać jak zwykły switch.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7 (edytowany przez MrCiek4wski 2019-12-14 15:30:30)

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

No tak, rozumiem, przy takim ustawieniu wszystko działa, tyle że jak mówiłem, MUSZĘ korzystać w tym celu z brctl, a nie z vlanów, bo docelowe urządzenie (to, które będzie zamiast TP-LINKa) NIE MA ich obsługi. Według teorii, brctl powinien zachowywać się dokładnie tak samo, czyli jak switch, a jednak przekazuje z portu do portu (eth0.2 i eth0.3) TYLKO broadcast.

8

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Jeżeli by tak było jak piszesz to żaden router z openwrt by nie działał gdzie domyślnie robiony jest bridge z lanu i wifi.

Zresztą jak chcesz się wanu pobyć to interfejs wanu wkłada się bridga lanowego i działa. W setkach instalacji....

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9 (edytowany przez MrCiek4wski 2019-12-14 16:13:38)

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

"W stekach instalacji" działa, gdy DHCP jest bezpośrednio na br-lan, a nie na zewnątrz...

Nie wiem, co mam jeszcze napisać. Sprawdziłem tcpdump na PC, br-DIRECT i w 10.0.0.0/24. W jedną i drugą stronę przechodzą ARP, sieć 10.0.0.1 dostaje DHCP request z PC (bo jest na broadcast), ale offer i ack już nie bo mają dest dla MAC unicast, czego br-DIRECT z jakiegoś powodu nie forwarduje. Od PC do 10.0.0.0/24 i w drugą przez br-DIRECT nie przechodzi nic, co ma jakikolwiek MAC unicast.

10

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Nie, gdy w ogóle nie ma dhcp. Przecież właśnie  w ten sposób konfiguruje się głupiego AP - robi się bridge wanu, lanu, wifi, wyłącza się dhcp. Działa zawsze.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

11 (edytowany przez MrCiek4wski 2019-12-14 18:26:48)

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Zrobiłem głupiego AP, dalej brak komunikacji między eth0.1 a eth0.2.

network.loopback=interface
network.loopback.ifname='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.globals=globals
network.lan=interface
network.lan.type='bridge'
network.lan.proto='dhcp'
network.lan.delegate='0'
network.lan.ifname='eth0.1 eth0.2'
network.wan=interface
network.wan.proto='dhcp'
network.wan.auto='0'
network.wan.ifname='eth0.2'
network.wan6=interface
network.wan6.proto='dhcpv6'
network.wan6.auto='0'
network.wan6.ifname='eth0.2'
network.wan6.reqaddress='try'
network.wan6.reqprefix='auto'
network.@switch[0]=switch
network.@switch[0].name='switch0'
network.@switch[0].reset='1'
network.@switch[0].enable_vlan='1'
network.@switch_vlan[0]=switch_vlan
network.@switch_vlan[0].device='switch0'
network.@switch_vlan[0].vlan='1'
network.@switch_vlan[0].ports='0t 2 3 4'
network.@switch_vlan[0].vid='1'
network.@switch_vlan[1]=switch_vlan
network.@switch_vlan[1].device='switch0'
network.@switch_vlan[1].vlan='2'
network.@switch_vlan[1].vid='2'
network.@switch_vlan[1].ports='0t 1'

12

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Przywróć ustawienia domyślnie. Nie zmieniaj nic kompletenie - nie dodawaj tych delegate, reqaddress, vid czy czegoś innego. Zrób tylko

uci del network.wan
uci set network.lan.ifname='eth0.1 eth0.2'
uci commit
reboot

Musi działać.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

13

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Próbowałem chyba wszystkiego, od zmiany metryki po randomizowanie MACów, setageing i czyszczenie tablic z brforward, ustawienia domyślne... nie działa nic, nie pojmuję co w tak prostym ustawieniu może się popsuć. Wyczyszciłem ovrelay, zrobiłem co napisałeś, ale dodałem vlan o id 2. Inaczej jak ma router wiedzieć który vlan jest który, kiedy w lan definiuję mu eth0.X?

config:

network.loopback=interface
network.loopback.ifname='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.lan=interface
network.lan.type='bridge'
network.lan.ifname='eth0.1 eth0.2'
network.lan.proto='static'
network.lan.netmask='255.255.255.0'
network.lan.ipaddr='192.168.1.1'
network.@switch[0]=switch
network.@switch[0].name='switch0'
network.@switch[0].reset='1'
network.@switch[0].enable_vlan='1'
network.@switch_vlan[0]=switch_vlan
network.@switch_vlan[0].device='switch0'
network.@switch_vlan[0].vlan='1'
network.@switch_vlan[0].ports='0t 2 3 4'
network.@switch_vlan[0].vid='1'
network.@switch_vlan[1]=switch_vlan
network.@switch_vlan[1].device='switch0'
network.@switch_vlan[1].vlan='2'
network.@switch_vlan[1].vid='2'
network.@switch_vlan[1].ports='0t 1'

14

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

Który masz model tego 740 że nie masz domyślnie eth0.2?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

15 (edytowany przez MrCiek4wski 2019-12-14 22:22:58)

Odp: Bardzo dziwna konfiguracja z zewnętrznym DHCP i bridgem

TL-WR740N Ver. 4.26. Wydawało mi się, że wszystkie 740 mają eth0 i eth1(?), ale akurat na tym coś jest nie tak z PHY i muszę korzystać z vlanów.

PS: Właśnie, czy to PHY? Problem z eth1 jest taki, że nawet kiedy do niego nie podłączony jest kabel, to czasami carrier jest widoczny jako 1 (jest połączony). Skoro za identyfikację stanu linii odpowiedzialny jest PHY i gdyby coś za PHY było uszkodzone, to albo byłby problem z inicjacją i błędy w dmesg od sterownika albo carrier byłby cały czas 0, to czy napewno uszkodzone jest PHY? Wychodziłem z założenia, że jeżeli tak jest, to nie może to mieć wpływu na eth0. Czy to jest prawda, czy się mylę?