重新启动后如何使Tap接口持久化?


24

有些任务需要配置 Tap接口+分配所有权。因此,我正在手动执行此操作:

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

或使用

ip tuntap add dev tap0 mode tap user <username>

重新启动后如何在不将这些命令添加到Shell脚本并添加到启动的情况下使Tap接口配置永久存在

我想到的是通过/ etc / network / interfaces进行如下操作:

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

但是由于某种原因,它不起作用。

有任何想法吗?

Answers:


20

对于我的一生,我看不出为什么这个问题应该被否决。明确,正确,答案明确。我已经投票了。

您正在使用过时的实用程序,例如tunctl,应改用ip/ 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

您的错误在于使用static而不是manual。原因是,由于您要尝试为虚拟接口提供与主接口(wlan0 / eth0)在同一子网中的地址,因此当它尝试自动添加本地路由时,

    ip route add 192.168.1.0/24 dev tap1

它发现这样的路线已经存在,并且抱怨。如果使用手动而非静态,则可以删除此路由,这当然是没有用的。

另外,您应该添加一条路线

     ip route add 192.168.1.121/32 dev tap1

通知您的内核该路由有异常

     ip route add 192.168.1.0/24 dev eth0/wlan0 

就这样。


ubuntu 17.10上的某些功能对我不起作用:我的tun0未创建-服务网络状态表明该接口tun0不存在。如果有人愿意看一下,这是接口文件:gist.github.com/velis74/ab75a46893eaed8bd08b8c6292b2737a
velis

@velis您的新界面称为tap0,而不是tun0,这就是为什么找不到它的原因。请注意,tuntap接口本质上是不同的,en.wikipedia.org / wiki / TUN / TAP,您希望创建哪一个?
MariusMatutiae

是的,它叫做tap0。这个答案是关于创建一个分接设备,而不是一个调音设备。我看不到这可能是我失败的原因。前置添加设备命令可从命令行完美执行。
velis

原来我只是想念一个auto tap0节。要点已相应更新。
velis

0

您可能还需要执行几个步骤:

  1. 添加新的路由表编辑/ etc / iproute2 / rt_tables以添加新的路由表。将其称为路由表“ rt2”,并将其首选项设置为1:
    55     local
    254     main
    253     default
    0       unspec
    1       rt2
  1. 如上一个答案中所述,创建一个Tap接口,但是随后您需要配置新的路由表并设置路由规则。添加到/ 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

要测试它:

ip route list table rt2
ip rule show
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.