Tworzenie punktu dostępu WiFi na jednym interfejsie w systemie Linux

14

Próbuję utworzyć punkt dostępu Wi-Fi lub punkt dostępu na moim laptopie z systemem Linux. Używam opensuse Kde 12.3.

Odkryłem oprogramowanie o nazwie hostapdHotspot, które wymaga dwóch interfejsów. Jeden podłączony do Internetu, a drugi, w którym chcesz utworzyć punkt dostępu ( samouczek tutaj ). Problemem jest to, że nie mam połączenia Ethernet. wlanInterfejs jest używany do łączenia się z internetem.

Czy istnieje sposób utworzenia punktu dostępu na tym samym interfejsie, który jest podłączony do Internetu (podobnie jak oprogramowanie connectify robi to w systemie Windows)? Myślałem o stworzeniu interfejsu wirtualnego (takiego jak ten airmon-ngdo monitorowania Wi-Fi) i wykorzystania go jako drugiego interfejsu. czy to możliwe?

AKTUALIZACJA

Oto, co udało mi się zrobić do tej pory:

1) Utwórz 2 interfejsy (jeden jako stacja, a drugi jako punkt dostępu)

  iw phy phy0 interface add mySta type station
  iw phy phy0 interface add myAcc type __ap

2) Daj im osobny identyfikator Mac ID

ifconfig myAcc hw ether A4:17:FE:6E:00:53
ifconfig myAcc 192.168.27.1 up

3) uruchom hostapd w interfejsie myAcc

4) uruchom dnsmasq, aby podać adres IP podłączanym urządzeniom

Wszystko to działa. Urządzenia mogą łączyć się z tą siecią i uzyskiwać adres IP. Następnym krokiem jest zapewnienie maskowania IP

iptables --table nat --append POSTROUTING --out-interface mySta -j MASQUERADE
iptables --append FORWARD --in-interface myAcc -j ACCEPT

Ale interfejs mySta nie może teraz połączyć się z Internetem. Jest w stanie uzyskać Essid, ale nie może uzyskać adresu IP.

Polecenie dhclient mySta nie wyświetla żadnego komunikatu i po pewnym czasie wyświetla błąd:

ls: cannot access /var/run/netconfig//mySta/: No such file or directory

Czy ktoś może dowiedzieć się, jak uzyskać adres IP?

adityap174
źródło
Czy próbowałeś z „Dummy net driver driver” (sterownik jądra) jako modułem. Nie mogę ci pomóc bardziej, bo nie znam openSUSE. Ale widzę błędy zgłaszane od wersji 11 i wyższej, gdy jest ona zbudowana z Yast. Więc uważaj.
Diblo Dk
Mogę oczywiście pomóc, jeśli można to zrobić w ten sam sposób (konfiguracja jądra, konfiguracja sieci) jak w Gentoo, Debian lub Ubuntu.
Diblo Dk
Każda pomoc będzie mile widziana. Nie używam narzędzi Yast jako takich. Konfiguracje pochodziły z samouczka na temat Ubuntu. System plików i konfiguracje są prawie takie same.
adityap174
Jaka jest twoja wersja jądra?
Diblo Dk
Jądro: Linux x86_64 3.7.10-1.16-desktop
adityap174

Odpowiedzi:

9

Dla każdego, kto boryka się z tym problemem, problem dotyczył adresu Mac. Uruchomiłem interfejs punktu dostępu, podałem mu adres mac. Następnie po uruchomieniu hostapd dodał interfejs stacji, podał mu inny adres mac i podłączył go do sieci oraz podał adres IP stacji jako domyślną bramę klientów przez dnsmasq.

Teraz wszystko działa poprawnie.

Jak zauważył Diblo Dk, można było używać interfejsów wirtualnych i fikcyjnych, ale hostapd nie działał z nimi. Nie wiem dlaczego.

Oto kroki:

  1. wyłącz usługę menedżera sieci, ponieważ zakłóca ona interfejsy wirtualne
  2. wyłącz wlan0 używając ifconfig wlan0 w dół
  3. utwórz interfejs punktu dostępu za pomocą polecenia iw (wpisz __ap), przypisz mu inny adres mac i ip
  4. włącz hostapd w tym interfejsie dostępu
  5. użyj dnsmasq, aby przypisać łączącym się klientom w tym interfejsie adresy IP i podać domyślną bramę jako ip interfejsu stacji, który ma zostać utworzony
  6. włącz dnsmasq w interfejsie dostępu. Teraz klient będzie mógł połączyć się z punktem dostępu i uzyskać adresy IP.
  7. utwórz nowy interfejs (stacja typu) przypisz mu osobny adres mac i podłącz go do sieci, przypisując essid i używając dhclient do uzyskania adresu IP.
  8. jeśli to konieczne, wykonaj maskowanie IP za pomocą polecenia iptables
adityap174
źródło
mówiąc wprost: WTF hostapd :)
Diblo Dk
Czy możesz zaktualizować swoją odpowiedź dokładnymi krokami, które wykonałeś? To zdecydowanie odpowiedź, którą chciałbym zapisać.
Diblo Dk
zaktualizowane :) chcesz więcej szczegółów?
adityap174
Fajny sposób na obejście problemu :)
Diblo Dk
Jakiego klucza / chipsetu używałeś?
Alvin,
2

Skonfiguruj sieć fikcyjną

1 Otwórz konsolę

su -

2 Sprawdź, czy masz fikcyjnego sterownika

modprobe -l | grep /net/dummy.ko

(!) Jeśli nie masz fikcyjnego sterownika, przejdź do „ Utwórz moduł jądra ”.

3 Załaduj manekina kierowcę

modprobe dummy

(!) Nie dodawaj go do uruchamiania, jeśli się nie powiedzie.

4 Przetestuj manekina0, ustawiając go

ifconfig dummy0 10.246.75.1 netmask 255.255.255.0 broadcast 10.246.75.255 up

ifconfig

To da ci podobny wynik.

dummy0  Link encap:Ethernet  HWaddr 00:2D:32:3E:39:3B
        inet addr:10.246.75.1  Bcast:10.246.75.255  Mask:255.255.255.0
        ...

5 Dodaj fałszywy sterownik do uruchamiania

Edytuj plik sys jądra.

nano /etc/sysconfig/kernel

i dodaj „ manekina ” do MODULES_LOADED_ON_BOOT.

MODULES_LOADED_ON_BOOT = "..."

Dawny. MODULES_LOADED_ON_BOOT = "manekin vmcp".

6 Skonfiguruj ustawienia sieciowe dla manekina0

Utwórz plik ifcfg-dummy0.

nano /etc/sysconfig/network/ifcfg-dummy0

Dodaj do pliku ifcfg-dummy0:

# Configuration for dummy0
BOOTPROTO=static

# This line ensures that the interface will be brought up during boot.
STARTMODE=onboot

# dummy0 - This is the main IP address that will be used for most outbound connections.
# The address, netmask and gateway are all necessary. The metric is not necessary but
# ensures you always talk to the same gateway if you have multiple public IPs from
# different subnets.
IPADDR=10.246.75.1
NETMASK=255.255.255.0
BROADCAST=10.246.75.255
GATEWAY=10.246.75.1



Utwórz moduł jądra

1 Najpierw zainstaluj niezbędne rzeczy

Otwórz YaST.

Przejdź do Software-> Software Management.

Kleszcz:

Development 

[X] Base Development
[X] Linux Kernel Development
[X] C/C++ Development

2 Wróć do konsoli i przejdź do źródła jądra

cd /usr/src/linux

3 Zaimportuj bieżącą konfigurację jądra

zcat /proc/config.gz > .config

4 Otwórz menu jądra

make menuconfig

5 Dodaj obsługę sterownika sieciowego Dummy

Przejdź do Device Drivers->Network device support

* Network core driver support
    M Dummy net driver support

(!) Jeśli obok „Obsługa sterownika rdzenia sieci” znajduje się gwiazdka, możesz pominąć krok 7 i 9.

6 Skompiluj jądro

make -j(n+1)

Gdzie (n + 1) = liczba rdzeni procesora plus jeden używany do przyspieszenia kompilacji. Dla czterech rdzeni użyj make -j5.

7 Zainstaluj nowe jądro

make install

8 Zainstaluj moduły

make modules_install

9 Załaduj nowe jądro

reboot



Definiowanie VIPA (część o ładowaniu modułu i ifcfg-dummy0): http://wiki.linuxvm.org/wiki/Defining_a_VIPA
Konfigurowanie statycznych adresów IP: https://www.linode.com/wiki/index.php/Configure_Static_IPs
openSUSE 12.3 i instalowanie nowych wersji jądra Linux z kernel.org: http://forums.opensuse.org/blogs/jdmcdaniel3/opensuse-installing-new-linux-kernel-versions-134/
OpenSUSE 11.2 - Jak skompilować jądro dla początkujących : http://linuxtweaking.blogspot.dk/2010/04/opensuse-112-how-to-compile-kernel-for.html

Diblo Dk
źródło
Dzięki za tak szczegółowe wyjaśnienie. Próbowałem tej metody. Udało mi się stworzyć interfejs dummy0 i uruchomić przy starcie systemu. Ale jak zrobić z niego interfejs bezprzewodowy? iwconfig daje: dummy0 brak rozszerzeń bezprzewodowych. Hostapd nie działa z tym. Daje błąd: inicjalizacja sterownika nl80211 nie powiodła się
adityap174
Tak, problem polega na tym, że masz konflikt adresów IP. Ale można to zrobić za pomocą Pseudo modułu (Przypisz wiele adresów IP). Daj mi trochę czasu na sprawdzenie twojego systemu.
Diblo Dk,
Możesz także zajrzeć tutaj linode.com/wiki/index.php/Configure_Static_IPs#OpenSUSE Możliwe, że możesz zobaczyć, jak to zrobić z wlan :)
Diblo Dk
, problem polega na tym, że dostaniesz konflikt adresów IP *
Diblo Dk,
1

Utwórz wirtualny interfejs

Utwórz plik ifcfg-wlan0: 0

nano /etc/sysconfig/network/ifcfg-wlan0:0

Dodaj do pliku ifcfg-wlan0: 0:

DEVICE=wlan0:0

# Configuration for wlan0:0
ONBOOT=yes

# This line ensures that the interface will be brought up during boot.
BOOTPROTO=static

# wlan0:0 - This is the main IP address that will be used for most outbound connections.
# The address, netmask and gateway are all necessary. The metric is not necessary but
# ensures you always talk to the same gateway if you have multiple public IPs from
# different subnets.
IPADDR=10.246.75.1
NETMASK=255.255.255.0
BROADCAST=10.246.75.255
GATEWAY=10.246.75.1

Polecenia do aktywacji interfejsu

ifup wlan0:0

Uwaga: zamknięcie głównego interfejsu powoduje również wyłączenie wszystkich jego aliasów. Aliasy można zamknąć niezależnie od innych interfejsów.

Sprawdź, czy interfejs działa

ifconfig

To da ci podobny wynik.

wlan0:0  Link encap:Ethernet  HWaddr 00:2D:32:3E:39:3B
         inet addr:10.246.75.1  Bcast:10.246.75.255  Mask:255.255.255.0
         ...

http://forums.opensuse.org/english/get-technical-help-here/network-internet/461132-os-11-4-network-manager-default-connection-can-handle-virtual-interfaces.html# post2350426

Diblo Dk
źródło
nawet to nie działało z hostapd. Dał ten sam błąd: Nie można otworzyć pliku / sys / class / net / dummy0 / phy80211 / name: Nie ma takiego pliku lub katalogu z dummy0 i nie można otworzyć pliku / sys / class / net / wlan0: 0 / phy80211 / name: Brak takiego pliku lub katalogu z interfejsem wirtualnym. Dziękuję za twoją pomoc. :) Problem dotyczył adresu mac. Poparłem twoje odpowiedzi i zamieszczam rozwiązanie dla innych.
adityap174