Como tornar as interfaces de toque persistentes após a reinicialização?

24

Algumas tarefas requerem ter interfaces de toque configuradas + atribuir propriedade . Então, eu estou fazendo isso manualmente:

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

ou usando

ip tuntap add dev tap0 mode tap user <username>

Como posso tornar a configuração das interfaces de toque peristente após a reinicialização sem adicionar esses comandos a um script de shell e adicionar à inicialização

O que tenho em mente é fazê-lo através do / etc / network / interfaces, como o seguinte:

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

Mas, por alguma razão, isso não funciona.

Alguma ideia?

AJN
fonte

Respostas:

20

Não consigo ver, por toda a minha vida, por que essa questão deve ser votada com baixa votação. É claro, correto, tem uma resposta bem definida. Eu voto positivo.

Você está usando utilitários obsoletos, como tunctl, deve usar o ip . A estrofe correta para / etc / network / interfaces é:

    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

Seu erro foi usar estática em vez de manual . O motivo é que, como você está tentando fornecer à interface virtual um endereço na mesma sub-rede que sua interface principal (wlan0 / eth0), quando ela tenta adicionar automaticamente uma rota local,

    ip route add 192.168.1.0/24 dev tap1

descobre que essa rota já existe e reclama. Se você usar manual em vez de estático, poderá excluir esta rota, que é obviamente inútil.

Além disso, você deve adicionar uma rota

     ip route add 192.168.1.121/32 dev tap1

para informar seu kernel que há uma exceção na rota

     ip route add 192.168.1.0/24 dev eth0/wlan0 

Isso é tudo.

MariusMatutiae
fonte
Algo não funciona para mim aqui no ubuntu 17.10: meu tun0 não foi criado - o status da rede de serviço diz que a interface tun0não existe. Aqui está o arquivo de interfaces, se alguém quiser dar uma olhada: gist.github.com/velis74/ab75a46893eaed8bd08b8c6292b2737a
velis
@velis Sua nova interface se chama tap0 , não tun0 , é por isso que não foi encontrada. Observe que as interfaces tun e tap são fundamentalmente diferentes, en.wikipedia.org/wiki/TUN/TAP , qual você deseja criar?
MariusMatutiae
Sim, chama-se tap0. Esta resposta é sobre como criar um dispositivo de toque, não um dispositivo de toque. Não vejo como isso pode ser a causa do meu fracasso. O comando pré-up add device executa perfeitamente na linha de comando.
velis
Acontece que eu estava perdendo apenas uma auto tap0estrofe. Gist atualizado de acordo.
velis
0

Você pode precisar executar mais algumas etapas:

  1. Adicionar uma nova tabela de roteamento Edite / etc / iproute2 / rt_tables para adicionar uma nova tabela de roteamento. Chame-a de tabela de roteamento “rt2” e defina suas preferências como 1:
    55     local
    254     main
    253     default
    0       unspec
    1       rt2
  1. Conforme explicado na resposta anterior, crie uma interface de toque, mas você precisará configurar as novas tabelas de roteamento e definir regras de roteamento. Adicione ao / 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

Para testá-lo:

ip route list table rt2
ip rule show
Ethan Ghoreishi
fonte