Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Ubuntu - mostek wlan i eth  (Przeczytany 5828 razy)

cayetan

  • Gość
Ubuntu - mostek wlan i eth
« dnia: 2017-01-20, 15:37:21 »
Witam serdecznie

Posiadam router 3G LTE PLAY. Router rozgłasza WIFI.
Do WIFI mam podłączony laptop z ubuntu 16.04 oraz stacjonarkę z Ubuntu 14.04.

Za stacjonarką chcę podłączyć poprzez kartę sieciową eth kolejny komputer z Lubuntu 16.10.

Mam problem z konfiguracją Ubuntu 14.04 pobierającego sygnał z WIFI i dającego na kablu do kolejnego kompa.
Założenie jest takie, że wszystkie komputery mają być w JEDNEJ sieci lokalnej i każdy ma widzieć się nawzajem.

Skonfigurowałem komputer z Ubuntu 14.04 jako router według :
https://help.ubuntu.com/community/Router

wlan posiada adresy 192.168.0.0, natomiast eth0 192.168.1.0
Umieszenie interfejsu eth0 i wlan0 w jednej sieci powodowało brak internetu na naszym łączniku dlatego zastosowałem dwie sieci z tą samą maską 255.255.255.0

Efekt takiej konfiguracji jest taki, że wszystkie komputery mają internet, na ostatnim komputerze z Lubuntu mogę pingować komputery w sieci 192.168.0.0 oraz 192.168.1.1.

Niestety z laptopa Ubuntu 16.04 nie mogę połączyć się z ostatnim komputerem Lubuntu - nie pinguje sieci 192.168.1.0

Czy mogę prosić o pomoc w tej sprawie.
Rozwiązać to za pomocą kolejnego wpisu w iptables?

Najlogiczniejszym rozwiązaniem byłoby dla mnie stworzenie bridge. Niestety brctl nie pozwala mi dodać eth0 i wlan0 do jednego mostka. Jakie miałbym wtedy nadać adresy IP interfejsów?

Cała aktualna konfiguracja jest wpisana ręcznie - adresy statyczne.

Bardzo proszę o ewentualne uwagi bo nie jestem pewien jak to razem połączyć.

Pozdrawiam

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Ubuntu - mostek wlan i eth
« Odpowiedź #1 dnia: 2017-01-20, 15:49:41 »
Podstawy routingu.

Musisz powiedzieć ubuntu 16.04, że do sieci z Lubuntu trzeba przechodzić przez Ubuntu 14.04.

Ze względów techniczno-protokołowych nie bardzo da się zbridżować eth z wifi w trybie client. Są jakieś łaty (uruchamiane dodaniem do interfejsu wlan flagi 4addr poleceniem iw), ale jest duża szansa, że AP odrzuci takie pakiety.
« Ostatnia zmiana: 2017-01-20, 15:53:14 wysłana przez Paweł Kraszewski »
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

cayetan

  • Gość
Odp: Ubuntu - mostek wlan i eth
« Odpowiedź #2 dnia: 2017-01-23, 17:33:20 »
No właśnie z routingiem i iptables jest u mnie kiepsko.

Rozrysowałem odręcznie wszystko aby pokazać o co chodzi.
ip_forwarding mam włączone. Mam problem z dopisaniem dobrych tras. Próbowałem już tyle komend iptables, że na końcu nie wiem czy poprzednie nie wykluczały kolejnych. Mam też problem z prawidłowym wpisaniem bram dla poszczególnych interfejsów.

Główna brama do internetu ma adres 192.168.0.1.
Na "trójce" ustawiam bramę 192.168.1.10 czyli wskazuję na "dwójkę".
Jakie bramy ustawić na "dwójce"? eth0 - 192.168.1.10 a wlan0 - 192.168.0.1 ?
"jedynka" ma ustawioną bramę 192.168.0.1

Czy jeżeli prawidłowo ustawię iptables na "dwójce" to pakiet wysłany do sieci 192.168.1.0 przez "jedynkę" będzie krążył w sieci 192.168.0.0 i zostanie przechwycony i przekazany przez "dwójkę"?

Gdzieś brakuje mi podstawy. Prościej by było jeżeli "dwójka" była główną bramą do internetu.

Z tego co udało mi się wyczytać to na "dwójce" ustawiam:
1. Przekazywanie pakietów pomiędzy sieciami:
iptables -A FORWARD -s 192.168.1.0 -d 192.168.0.0 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0 -d 192.168.0.1 -j ACCEPT

2. Tłumaczenie adresów. SNAT i DNAT i tutaj wymiękam.

Używałem tego skryptu ale poprzestawiałem bramy i teraz "trójka" pinguje brame 192.168.0.1, DNS tłumaczy adres internetowy ale go nie pinguje.

EXTIF=wlan0
INTIF=eth0
echo -e "\n\nLoading simple rc.firewall-iptables version $FWVER..\n"
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe

EXTIF="eth0"
INTIF="eth1"
#INTIF2="eth0"
echo "   External Interface:  $EXTIF"
echo "   Internal Interface:  $INTIF"

#======================================================================
#== No editing beyond this line is required for initial MASQ testing ==
echo -en "   loading modules: "
echo "  - Verifying that all kernel modules are ok"
$DEPMOD -a
echo "----------------------------------------------------------------------"
echo -en "ip_tables, "
$MODPROBE ip_tables
echo -en "nf_conntrack, "
$MODPROBE nf_conntrack
echo -en "nf_conntrack_ftp, "
$MODPROBE nf_conntrack_ftp
echo -en "nf_conntrack_irc, "
$MODPROBE nf_conntrack_irc
echo -en "iptable_nat, "
$MODPROBE iptable_nat
echo -en "nf_nat_ftp, "
$MODPROBE nf_nat_ftp
echo "----------------------------------------------------------------------"
echo -e "   Done loading modules.\n"
echo "   Enabling forwarding.."
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "   Enabling DynamicAddr.."
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "   Clearing any existing rules and setting default policy.."

iptables-restore <<-EOF
*nat
-A POSTROUTING -o "$EXTIF" -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i "$EXTIF" -o "$INTIF" -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i "$INTIF" -o "$EXTIF" -j ACCEPT
-A FORWARD -j LOG
COMMIT
EOF

echo -e "\nrc.firewall-iptables v$FWVER done.\n"

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Ubuntu - mostek wlan i eth
« Odpowiedź #3 dnia: 2017-01-23, 22:34:52 »
W załączniku przerysowałem schemat z Twojego rysunku.

Firewall możesz odpuścić, nie służy do tego do czego myślisz, że służy (w szczególności łańcuch FORWARD). Wszystko, co potrzebujesz - poza internetem na kompie niebieskim, robisz routingiem. Internet na kompie niebieskim robisz NATem, bo zakładam, że nic nie da się ręcznie skonfigurować na routerze ("mydelniczka" 3G)

Stan routingu po "ręcznym" wyklikaniu tylko adresacji i bram.

Router (pomarańczowy)

Ma następującą tablicę routingu (pomijam zawiłości związanie z enkapsujacją pakietów w PPP i takie tam):

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         BramaOpa        0.0.0.0         UG    100    0        0 interfejs3G
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 wlan0

Co czyta się:
Jeżeli adres docelowy pakietu znajduje się w sieci 192.168.0.0/24, to taki pakiet można wysłać bezpośrednio przez interfejs wlan0. Wszystke inne pakiety wysyłać do bramy o adresie IP BramaOpa przez interfejs 3G

Ma następującą regułę IPTABLES:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 ! -d 192.168.0.0/24 -j MASQUERADE

Co czyta się:
Jeżeli do routera wpada pakiet z sieci 192.168.0.0/24 nie skierowany do tej sieci (czyli skierowany do internetu - zaprzeczenie to ten wykrzyknik w regule), to podmień adres źródłowy pakietu na własny adres WAN i wypchnij go w internet. Jak wróci, odtwórz podmieniony adres i odeślij do zleceniodawcy.

Ubuntu 16.04 (żółty)

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 wlan0

Co czyta się:
Jeżeli adres docelowy pakietu znajduje się w sieci 192.168.0.0/24, to taki pakiet można wysłać bezpośrednio przez interfejs wlan0. Wszystke inne pakiety wysyłać do bramy o adresie IP 192.168.0.1 przez ten sam interfejs wlan0

Ubuntu 14.04 (zielony)

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

Co czyta się:
Jeżeli adres docelowy pakietu znajduje się w sieci 192.168.0.0/24, to taki pakiet można wysłać bezpośrednio przez interfejs wlan0. Jeżeli adres docelowy pakietu znajduje się w sieci 192.168.1.0/24, to taki pakiet można wysłać bezpośrednio przez interfejs eth0. Wszystkie inne pakiety wysyłać do bramy o adresie IP 192.168.0.1 przez interfejs wlan0

Lubuntu (niebieski)

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.10    0.0.0.0         UG    100    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

Co czyta się:
Jeżeli adres docelowy pakietu znajduje się w sieci 192.168.1.0/24, to taki pakiet można wysłać bezpośrednio przez interfejs eth0. Wszystkie inne pakiety wysyłać do bramy o adresie IP 192.168.1.10 przez interfejs eth0

Co działa
* Żółty, zielony i pomarańczowy mogą ze sobą rozmawiać (są w tej samej adresacji)
* Żółty ma wyjście w internet przez router i NAT na routerze. NAT załatwia też ruch zwrotny z internetu do żółtego.
* Zielony ma wyjście w internet przez router i NAT na routerze. NAT załatwia też ruch zwrotny z internetu do zielonego.
* Niebieski może wysłać pakiet do zielonego i odwrotnie (są w tej samej adresacji)

i teraz skup się:

* Niebieski może wysłać pakiet do żółtego: żółty nie jest w sieci niebieskiego, więc pakiet od niebieskiego jest wysłany do zielonego jako jego bramy. Dla zielonego żółty jest już w sieci lokalnej, więc pakiet bez zmian jest do niego przesłany. Do żółtego dochodzi pakiet z adresem niebieskiego jako nadawcą (to ważny punkt)
* Niebieski może wysłać pakiet do pomarańczowego: pomarańczowy nie jest w sieci niebieskiego, więc pakiet od niebieskiego jest wysłany do zielonego jako jego bramy. Dla zielonego pomarańczowy jest już w sieci lokalnej, więc pakiet bez zmian jest do niego przesłany. Do pomarańczowego dochodzi pakiet z adresem niebieskiego jako nadawcą (to ważny punkt)

Co NIE działa

* Jak żółty próbuje wysłać pakiet do niebieskiego, to ma tak: niebieski NIE jest w jego sieci lokalnej, nie ma innych tras, więc wybierana jest trasa domyślna i pakiet dla niebieskiego przesyłany jest do pomarańczowego jako bramy domyślnej żółtego.

* Jak pomarańczowy próbuje wysłać pakiet do niebieskiego to ma tak: niebieski NIE jest w jego sieci lokalnej, nie ma innych tras, więc wybierana jest trasa domyślna i pakiet dla niebieskiego przesyłany jest do operatora 3G jako bramy domyślnej pomarańczowego. Operator ubija ten pakiet jako tzw. nieroutowalny.

* Jak niebieski próbuje wysłać pakiet w internet, to po bramkowaniu go przez zielonego dochodzi do pomarańczowego z oryginalnym adresem nadawcy. Pomarańczowy nie za bardzo ma co zrobić z kosmitą i w zależności od konfiguracji innych reguł firewalla albo go ubija, albo próbuje "czysto" routować do operatora albo próbuje go NATować do operatora. Pierwsze dwa przypadki mordują pakiet, w trzecim pakiet wychodzi w internet, ale po powrocie pomarańczowy nie wie, co zrobić z tym pakietem i w efekcie też go ubija.

W efekcie jest tak, że niebieski nie ma wyjścia w internet a żółty i pomarańczowy go nie widzą.

Naprawa:

* Łączność żółty->niebieski

Na żółtym trzeba dopisać następującą regułę routingu:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     192.168.0.51    255.255.255.0   U     100    0        0 wlan0

Co czyta się:
Jeżeli adres docelowy pakietu znajduje się w sieci 192.168.1.0/24, to taki pakiet można wysłać przez bramę 192.168.0.51 osiągalną przez interfejs eth0. Ona będzie wiedziała co zrobić dalej z pakietem

* Łączność pomarańczowy->niebieski
Jeżeli nie można dopisać reguły routingu, to nic się nie da zrobić. Jeżeli można dopisać własną regułę, to ma ona postać dokładnie taką samą jak punkt wyżej.

* Internet dla niebieskiego
Jeżeli do routera udało się dopisać regułę routingu do niebieskiego via zielony, to w zasadzie powinno wszystko działać.

Jeżeli w routerze nie da się zrobić nowej reguły, to na zielonym trzeba zrobić następującą regułę NAT:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.0.0/24 -j MASQUERADE

Co czyta się:
Jeżeli do zielonego wpada pakiet z sieci 192.168.1.0/24 nie skierowany do sieci 192.168.0.0/24 (czyli skierowany do internetu), to podmień adres źródłowy pakietu na 192.168.0.51 i wypchnij go w pomarańczowego. Magia - pomarańczowy widzi pakiet niebieskiego tak, jakby zielony był jego nadawcą. Normalnie go obsługuje, wysyła w internet a odpowiedź odsyła do zielonego. Zielony odtwarza oryginalny adres i odsyła pakiet do niebieskiego. Voila! Niebieski ma internet.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

cayetan

  • Gość
Odp: Ubuntu - mostek wlan i eth
« Odpowiedź #4 dnia: 2017-01-24, 21:57:17 »
Bardzo dziękuję za szczegółowe wyjaśnienia. Rozjaśniło to wiele spraw i w sumie rozwiązuje cały problem.
Jednak powyższa konfiguracja nie jest do końca praktyczna. Jeżeli podłączymy kolejny komputer do WIFI to aby połączyć się z „niebieskim” znowu musimy dodawać mu wpisy dla routingu.

Wnioskuję, że jeżeli wszystkie komputery będą w jednej sieci 192.168.0.0 to uda się to tak skonfigurować, że na „żółtym” nie będzie trzeba konfigurować dodatkowej trasy tylko „zielony” przechwyci pakiet dla „niebieskiego” i go przekaże.

Próbowałem to skonfigurować ale znowu poległem. Napiszę co zrobiłem i co działa:
Zmieniłem adresy:
- zielony – eth0 : 192.168.0.40
- niebieski – eth : 192.168.0.41 brama 192.168.0.40

Po ustawieniu wlan0 i eth0 na „zielonym” w tej samej sieci powoduje brak komunikacji z czymkolwiek.
Dodajemy do „zielonego” trasy:
-net 0.0.0.0 gw 192.168.0.1 dev wlan0
-net 192.168.0.0 dev wlan0
-host 192.168.0.41 gw 192.168.0.40 dev eth0 (tutaj pojawia się się ciekawostka bo na liście ten wpis posiada netmask 255.255.255.255, jeżeli próbuję ją zdefinować poczas dodawania to otrzymuje komunikat: route: netmask 000000ff doesn’t make sense with host route) – ale działa.

Teraz możemy z „zielonego” pingować wszystkie komputery włącznie z internetem i tłumaczeniem DNS.

Z „żółtego” :
- możemy pingować obydwa interfejsy eth0 i wlan0 „zielonego”
- nie możemy pingować „niebieskiego”

Z „niebieskiego”
- możemy pingować tylko „zielonego”

Zacząłem więc kombinację z iptables. Po wpisaniu na „zielonym”:
iptables -t nat -A POSTROUTING -s 192.168.0.41 -d 0/0 -j MASQUERADE

Mogę wtedy z „niebieskiego” pingować „router:pomarańczowy” oraz „żółty”. Niestety na odwrót już nie. Co ciekawe mogę pingować adresy internetowe ale DNS już nie działa.

Jak teraz ugryźć temat?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Ubuntu - mostek wlan i eth
« Odpowiedź #5 dnia: 2017-01-25, 07:42:18 »
Protokół IP nie jest zaprojektowany do sytuacji, gdy komputer ma dwie karty sieciowe zaadresowane w tej samej sieci a podłączone do różnych segmentów fizycznych. Obszedłeś to dopisując ścieżkę do hosta z wymuszeniem konkretnej karty sieciowej. Zadziałałoby to też na żółtym po dopisaniu ścieżki typ host do niebieskiego, z IP WiFi zielonego jako bramą.

Sytuacja wygląda jak wygląda "za karę" za to, że masz router, nad którym nie masz żadnej kontroli. Najprostszym - a jeszcze tanim - rozwiązaniem byłoby dołożenie karty wifi do Lubuntu (karty na USB można kupić już za niecałe 40zł).

Poprawne - z punktu widzenia "podręczników" - rozwiązanie jest takie: router rozgłasza protokołem DHCP dodatkową ścieżkę do podsieci niebieskiego. Wtedy wszystko by działało. Ale - to tylko w sytuacji, gdy router możesz przekonfigurować według własnych potrzeb.
« Ostatnia zmiana: 2017-01-25, 07:46:13 wysłana przez Paweł Kraszewski »
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

cayetan

  • Gość
Odp: Ubuntu - mostek wlan i eth
« Odpowiedź #6 dnia: 2017-01-30, 11:31:12 »
Kupiłem nowiutką kartę WIFI za 45złotych. Rozwiązałem problem w ten sposób.
Na pewno dałoby się jakoś skonfigurować rozwiązanie jakie chciałem zastosować na początku ale czas poświęcony na to niestety nie kalkuluje się :)
W każdym razie, chciałbym jeszcze raz podziękować za pomoc.