วิธีการทำให้ส่วนต่อประสานของก๊อกคงอยู่หลังจากรีบูต?


24

งานบางอย่างต้องมีการแตะอินเตอร์เฟซการกำหนดค่า + เจ้าของกำหนด ดังนั้นฉันทำเอง:

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>

ฉันจะทำให้การกำหนดค่า tap interfaces คงที่หลังจากรีบูตโดยไม่ต้องเพิ่มคำสั่งเหล่านี้ลงในเชลล์สคริปต์และเพิ่มในการเริ่มต้น

สิ่งที่ฉันมีอยู่ในใจคือการทำผ่าน/ 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

แต่ด้วยเหตุผลบางอย่างมันไม่ทำงาน

ความคิดใด ๆ

คำตอบ:


20

ฉันไม่สามารถเห็นได้ว่าชีวิตของฉันทำไมทำไมคำถามนี้ควรลงคะแนน มันชัดเจนถูกต้อง แต่ก็มีคำตอบที่ชัดเจน ฉันได้ลงคะแนนแล้ว

คุณใช้ยูทิลิตีที่ล้าสมัยเช่น tunctl คุณควรใช้ipแทน stanza ที่ถูกต้องสำหรับ/ 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

ความผิดพลาดของคุณในการใช้คงแทนคู่มือ เหตุผลก็คือเนื่องจากคุณพยายามที่จะให้ที่อยู่อินเทอร์เฟซเสมือนในเครือข่ายย่อยเดียวกันกับอินเทอร์เฟซหลักของคุณ (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 นั่นเป็นสาเหตุที่ไม่พบ โปรดสังเกตว่าอินเทอร์เฟซแบบTunและTapนั้นแตกต่างกันโดยพื้นฐาน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. ตามที่อธิบายไว้ในคำตอบก่อนหน้านี้ให้สร้างอินเทอร์เฟซแบบแตะ แต่คุณต้องกำหนดค่าตารางเส้นทางใหม่และกำหนดกฎการกำหนดเส้นทาง เพิ่มไปยัง / 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.