Jak sprawić, by interfejsy tap były trwałe po ponownym uruchomieniu?

24

Niektóre zadania wymagają skonfigurowania interfejsów dotykowych + przypisania własności . Więc robię to ręcznie:

sudo tuntap -u <username>
sudo ifconfig tap0 up
sudo ip a a 192.168.1.1/24 dev tap0

lub używając

ip tuntap add dev tap0 mode tap user <username>

Jak sprawić, by konfiguracja interfejsów tap była trwała po ponownym uruchomieniu bez dodawania tych poleceń do skryptu powłoki i dodawania do uruchamiania

Mam na myśli to, że robię to za pośrednictwem interfejsów / etc / network /, takich jak:

iface tap1 inet static
address 192.168.1.121
netmask 255.255.255.0
pre-up /usr/sbin/tunctl -u ajn -t tap1

Ale z jakiegoś powodu to nie działa.

Jakieś pomysły?

AJN
źródło

Odpowiedzi:

20

Nie rozumiem przez całe życie, dlaczego to pytanie powinno zostać odrzucone. Jest jasne, poprawne, ma dobrze zdefiniowaną odpowiedź. Poparłem to.

Używasz przestarzałych narzędzi, takich jak tunctl, zamiast tego powinieneś użyć ip . Prawidłowa zwrotka dla / etc / network / interfaces to:

    iface tap1 inet manual 
    pre-up ip tuntap add tap1 mode tap user root
    pre-up ip addr add 192.168.1.121/24 dev tap1
    up ip link set dev tap1 up
    post-up ip route del 192.168.1.0/24 dev tap1 
    post-up ip route add 192.168.1.121/32 dev tap1
    post-down ip link del dev tap1

Twój błąd polegał na użyciu metody statycznej zamiast ręcznej . Powodem jest to, że ponieważ próbujesz nadać interfejsowi wirtualnemu adres w tej samej podsieci, co Twoja główna interfae (wlan0 / eth0), gdy próbuje on automatycznie dodać trasę lokalną,

    ip route add 192.168.1.0/24 dev tap1

stwierdza, że ​​taka trasa już istnieje i narzeka. Jeśli użyjesz ręcznego zamiast statycznego, możesz usunąć tę trasę, co oczywiście jest bezużyteczne.

Powinieneś także dodać trasę

     ip route add 192.168.1.121/32 dev tap1

aby poinformować jądro, że istnieje wyjątek od trasy

     ip route add 192.168.1.0/24 dev eth0/wlan0 

To wszystko.

MariusMatutiae
źródło
Coś tu nie działa dla mnie na Ubuntu 17.10: mój tun0 nie został utworzony - stan sieci serwisowej mówi, że interfejs tun0nie istnieje. Oto plik interfejsów, jeśli ktoś zechce
rzucić
@velis Twój nowy interfejs nazywa się tap0 , a nie tun0 , dlatego go nie znaleziono. Zauważ, że interfejsy tun i tap są zasadniczo różne, en.wikipedia.org/wiki/TUN/TAP , który z nich chcesz stworzyć?
MariusMatutiae
Tak, nazywa się tap0. Ta odpowiedź dotyczy tworzenia urządzenia z kranem, a nie tunera. Nie rozumiem, jak to może być przyczyną mojej porażki. Polecenie przed dodaniem urządzenia wykonuje się idealnie z wiersza poleceń.
velis
Okazuje się, że brakowało mi tylko auto tap0zwrotki. Gist odpowiednio zaktualizowane.
velis
0

Jest jeszcze kilka kroków, które możesz potrzebować:

  1. Dodaj nową tabelę routingu Edytuj / etc / iproute2 / rt_tables, aby dodać nową tabelę routingu. Nazwij to tabelą routingu „rt2” i ustaw jej preferencje na 1:
    55     local
    254     main
    253     default
    0       unspec
    1       rt2
  1. Jak wyjaśniono w poprzedniej odpowiedzi, utwórz interfejs kranu, ale następnie musisz skonfigurować nowe tabele routingu i ustawić reguły routingu. Dodaj do / etc / network / interfaces:
   #create a tap interface and make it persistent
    iface tap1 inet manual 
    pre-up ip tuntap add tap1 mode tap user root
    pre-up ip addr add 192.168.1.121/24 dev tap1
    up ip link set dev tap1 up
    post-up ip route del 192.168.1.0/24 dev tap1 
    post-up ip route add 192.168.1.121/32 dev tap1
    post-down ip link del dev tap1

    #configure the new routing table so that network 192.168.1.0 can be reached through the tap1 interface
    post-up ip route add 192.168.1.0/24 dev tap1 src 192.168.1.121 table rt2

    #set the default gateway to be 192.168.1.10
    post-up ip route add default via 192.168.1.10 dev tap1 table rt2

    #set rules so that traffic from and to 192.168.1.121 use the rt2 routing table 
    post-up ip rule add from 192.168.1.121/24 table rt2
    post-up ip rule add to 192.168.1.121/24 table rt2
sudo ifup tap1

Aby to przetestować:

ip route list table rt2
ip rule show
Ethan Ghoreishi
źródło