วิธีการปิดการใช้งาน IPv6 เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ OpenVPN โดยใช้ Network Manager บนระบบ dual-stack?


20

ฉันใช้ไคลเอนต์ OpenVPN ผ่านปลั๊กอิน OpenVPN Network Manager บน dual stack (หมายถึงกำหนดค่าทั้งสำหรับการเชื่อมต่อ IPv4 และ IPv6) Ubuntu 13.10 เพื่อเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดผ่าน VPN (redirect-เกตเวย์) มันใช้งานได้ดีโดยทั่วไป

อย่างไรก็ตามเนื่องจากระบบต้องการให้ IPv6 เป็นที่ต้องการ VPN "รั่ว" และเมื่อเชื่อมต่อกับเว็บไซต์ที่มีให้ใช้งานผ่าน IPv6 (เช่น Google หรือ Wikipedia) เบราว์เซอร์จะเชื่อมต่อโดยตรง

ทางออกหนึ่งคือการกำหนดค่าเซิร์ฟเวอร์ OpenVPN เพื่อให้การเชื่อมต่อ IPv6 ในขณะที่เป็นไปได้กับ OpenVPN ปลั๊กอินสำหรับตัวจัดการเครือข่ายในปัจจุบันไม่รองรับ

เนื่องจากการเชื่อมต่อ IPv6 ผ่าน VPN นั้นไม่จำเป็นอย่างยิ่งฉันต้องการปิดการใช้งาน IPv6 บนไคลเอนต์เมื่อทำการเชื่อมต่อกับเซิร์ฟเวอร์ OpenVPN มันเป็นไปได้? ถ้าเป็นเช่นนั้นฉันจะทำอย่างไร


1
VPN ของคุณไม่รองรับปริมาณการใช้งาน IPv6 หรือยัง
Michael Hampton


VPN ของฉันรองรับปริมาณการใช้งาน IPv6 ได้ดี แต่ตัวจัดการเครือข่ายไม่รองรับการกำหนดค่า IPv6 สำหรับ OpenVPN ในปัจจุบันเท่าที่ฉันจะบอกได้
สถานีปลายทางประณาม

1
เพียงบันทึกถ้าผู้ให้บริการ VPN ของคุณรั่วไหลออกมาเช่นนี้คุณต้องมีผู้ให้บริการรายใหม่ มีคนมากมายที่ได้รับสิทธินี้ IPv6 จะไม่หายไปและการปิดการใช้งานนั้นจะตัดคุณออกจากส่วนต่างๆของอินเทอร์เน็ตเท่านั้น
Michael Hampton

1
@MichaelHampton น่าเสียดายที่เซิร์ฟเวอร์ของฉัน ฉันเป็นผู้ให้บริการในกรณีนี้ มันรองรับ IPv6 แต่มาพร้อมกับหนึ่ง / 64 ดังนั้นฉันจะต้องประกบกันก่อนซึ่งมันค่อนข้างเจ็บปวด ที่สำคัญกว่านั้น (ในตอนนั้นฉันยังไม่ได้ตรวจสอบตั้งแต่) ผู้จัดการเครือข่ายมีปัญหาในการจัดการการเชื่อมต่อ OpenVPN ที่ใช้งาน IPv6 (IPv6 ผ่าน VPN แต่ทำงานกับการตั้งค่าเครือข่ายแบบแตะและบริดจ์ซึ่งเป็นสิ่งที่ฉันใช้อยู่ตอนนี้)
Damn Terminal

คำตอบ:


15

เพิ่มสิ่งนี้ลงในเคอร์เนลไลน์ในบูตโหลดเดอร์ของคุณเพื่อปิดการใช้งาน IPv6 ทั้งหมด:

ipv6.disable=1

หากคุณกำลังใช้ Grub (หากคุณยังไม่ได้ติดตั้ง boot-loader ของคุณเองคุณกำลังใช้ Grub อยู่) สายเคอร์เนลของคุณควรมีลักษณะดังนี้:

linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff ipv6.disable=1

แนวทางที่แนะนำสำหรับการเพิ่มบางอย่างลงในบรรทัดเคอร์เนลคือการเพิ่มพารามิเตอร์เคอร์เนลที่ต้องการให้กับGRUB_CMDLINE_LINUX_DEFAULTตัวแปรใน/etc/default/grubไฟล์:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

เมื่อคุณเพิ่มเข้าไปแล้วให้/etc/default/grubรันคำสั่งต่อไปนี้เพื่อสร้างของคุณใหม่grub.cfg:

sudo grub-mkconfig -o /boot/grub/grub.cfg

อีกวิธีหนึ่งการเพิ่มipv6.disable_ipv6=1แทนจะทำให้ IPv6 stack ทำงานได้ แต่จะไม่กำหนดที่อยู่ IPv6 ให้กับอุปกรณ์เครือข่ายของคุณ

หรือ

หากต้องการปิดการใช้งาน IPv6 ผ่าน sysctl ให้ใส่ข้อมูลต่อไปนี้ใน/etc/sysctl.confไฟล์ของคุณ:

net.ipv6.conf.all.disable_ipv6 = 1

อย่าลืมคอมเม้นต์โฮสต์ IPv6 ใด ๆ ใน/etc/hostsไฟล์ของคุณ:

#::1        localhost.localdomain   localhost

บันทึก

รีบูตอาจจะจำเป็นสำหรับวิธี sysctl และมีการรีบูตแน่นอนจำเป็นสำหรับวิธีเส้นเคอร์เนล

หรือ

หากต้องการปิดใช้งาน ipv6 ชั่วคราว :

sysctl -w net.ipv6.conf.all.disable_ipv6 = 1

หากต้องการเปิดใช้งานชั่วคราว :

sysctl -w net.ipv6.conf.all.disable_ipv6 = 0

ดังนั้นหากคุณต้องการปิดการใช้งาน ipv6 บนเงื่อนไขที่กำหนดให้เขียนสคริปต์ทุบตีที่ใดที่หนึ่งตามบรรทัดเหล่านี้:

#!/bin/bash
ipv6_disabled="$(sysctl net.ipv6.conf.all.disable_ipv6 | awk '{print $NF}')"
if (connected_to_vpn &> /dev/null); then
  (($ipv6_disabled)) || sysctl -w net.ipv6.conf.all.disable_ipv6=1
else
  (($ipv6_disabled)) && sysctl -w net.ipv6.conf.all.disable_ipv6=0
fi

บันทึก

คุณอาจต้องปิดการใช้งานโฮสต์ ipv6 ใด ๆ ใน/etc/hostsไฟล์ของคุณสำหรับวิธีนี้เช่นเดียวกับที่ฉันแนะนำในวิธีก่อนหน้านี้


5
ใช่แล้ว แต่ฉันต้องการปิดการใช้งาน IPv6 เมื่อเชื่อมต่อกับ VPN โดยใช้ตัวจัดการเครือข่ายไม่ใช่ฆ่ามันทั้งหมดในระบบของฉัน บางทีฉันควรทำให้ชัดเจนขึ้น
สถานีปลายทางประณาม

@DamnTerminal ดังนั้นคุณต้องการปิดการใช้งานเมื่อคุณเชื่อมต่อกับ VPN เท่านั้นในการปิดการใช้งานทั้งระบบก็ใช้ได้ดีตราบใดที่มันเกิดขึ้นเมื่อคุณเชื่อมต่อกับ VPN เท่านั้น
Alexej Magura

@DamnTerminal ฉันได้อัปเดตคำตอบเพื่อรวมตัวอย่างวิธีปิดใช้งาน ipv6 โดยใช้สคริปต์ทุบตีที่จะตรวจสอบเงื่อนไข คุณอาจใช้อินเตอร์เฟสบรรทัดคำสั่งของ NetworkManager nmcliเพื่อตรวจสอบว่าคุณเชื่อมต่อกับ VPN หรือไม่ หากไม่ได้ผลฉันมั่นใจว่ามียูทิลิตี net command line ที่นั่นซึ่งจะให้การเข้าถึงข้อมูลนั้น
Alexej Magura

ทำไมต้องลงคะแนน
Alexej Magura

น่าเสียดายที่โซลูชันนี้ ( sysctl) ไม่เปิดใช้งาน IPv6 สำหรับ WiFi อีกครั้งอย่างถูกต้อง คุณต้องเชื่อมต่อใหม่เพื่อจุดเชื่อมต่อเพื่อเปิดใช้งาน
Igor Mikushkin

5

คุณสามารถปิดการใช้งาน ipv6 ที่ระดับไคลเอนต์สำหรับการเชื่อมต่อตัวจัดการเครือข่ายเฉพาะโดยการตั้งค่าตัวเลือก IPv6 ipv6.method เป็น "ละเว้น"

// SOP: สร้างการเชื่อมต่อ LAN ของฉันใหม่โดยใช้ FIXED IP 192.168.0.95 กับ Ethernet `` ``

nmcli connection delete lan-ethernet
nmcli connection add con-name lan-ethernet \
    ifname enp0s31f6 \
    type ethernet \
    ip4 192.168.0.95/24  gw4 192.168.0.1

nmcli connection modify lan-ethernet  ipv6.method "ignore"
nmcli connection modify lan-ethernet  ipv4.dns "8.8.8.8 8.8.4.4"
nmcli connection up lan-ethernet
sleep 1
nmcli device status
nmcli connection show
ifconfig enp0s31f6

`` ``


1
น่าเสียดายที่ไม่มีผลต่อการเชื่อมต่อ VPN
Igor Mikushkin

0

ฉันใช้ Ubuntu 16.04.03 LTS เชื่อมต่อกับเซิร์ฟเวอร์ Pi-Hole ผ่าน PiVPN

นี่คือสิ่งที่ฉันทำเพื่อเปิดและปิด IPv6 โดยอัตโนมัติเมื่อเชื่อมต่อกับ VPN ผ่าน Network Manager:

  1. สร้างสคริปต์ใน/etc/NetworkManager/dispatcher.d:

    $ sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    
  2. เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์ (แก้ไขเนื้อหาสำหรับความต้องการของคุณ):

    #!/bin/sh
    # Network Manager Dispatcher Hook:
    # enables/disables ipv6 on vpn-down/vpn-up respectively
    #
    # Copyright (c) 2017 ooknosi
    # Apache License 2.0
    
    # Args
    INTERFACE="$1"
    ACTION="$2"
    
    case $ACTION in
        vpn-up)
        # vpn connected; disable ipv6
        sysctl -w net.ipv6.conf.all.disable_ipv6=1
        ### UNCOMMENT AND EDIT BELOW IF NECESSARY
        ## add pi-hole nameserver
        #echo -n "nameserver 192.168.1.1" | /sbin/resolvconf -a "tun0.openvpn"
        ### UNCOMMENT AND EDIT ABOVE IF NECESSARY
        ;;
    
        vpn-down)
        # vpn disconnected; enable ipv6
        sysctl -w net.ipv6.conf.all.disable_ipv6=0
        ### UNCOMMENT AND EDIT BELOW IF NECESSARY
        ## remove pi-hole nameserver
        #/sbin/resolvconf -d "tun0.openvpn"
        ### UNCOMMENT AND EDIT ABOVE IF NECESSARY
        ;;
    esac
    
    exit 0
    
  3. ทำให้สคริปต์เรียกใช้งานได้:

    $ sudo chmod 755 /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    

แค่นั้นแหละ. ฉันต้องเพิ่ม Pi-Hole DNS ของฉันด้วยตนเองเนื่องจากdnsmasqข้อผิดพลาดที่ป้องกันไม่ให้resolv.confอัปเดตอย่างถูกต้องดังนั้นให้แก้ไขบรรทัดที่ระบุหากคุณพบว่า DNS ของคุณรั่ว


น่าเสียดายที่โซลูชันนี้ไม่เปิดใช้งาน IPv6 สำหรับ WiFi อีกครั้งอย่างถูกต้อง คุณต้องเชื่อมต่อใหม่เพื่อจุดเชื่อมต่อเพื่อเปิดใช้งาน
Igor Mikushkin

0

ฉันคิดว่ามันน่ารำคาญน้อยกว่าที่จะปิดการใช้งาน ip6 ในไฟล์ไคลเอนต์ (แก้ไข client_conf_file.ovpn) ที่แก้ไขเคอร์เนล tcp stack

เปิด conf_file.ovpn ของคุณและเพิ่มบรรทัดติดตาม:

#disable ipv6
#https://community.openvpn.net/openvpn/ticket/849
pull-filter ignore "ifconfig-ipv6 "
pull-filter ignore "route-ipv6 "

ฉันลองแล้ว ipv6 ก็หายไป

ก่อน. ฉันวิ่งip a |grep globalและผลลัพธ์คือ:

    inet 192.168.43.39/24 brd 192.168.43.255 scope global dynamic noprefixroute wlan0
    inet 10.8.0.6/24 brd 10.8.0.255 scope global tun0
    inet6 2a00:1630:66:16::1004/64 scope global

หลังจาก. ฉันวิ่งip a |grep globalและผลลัพธ์คือ:

    inet 192.168.1.14/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
    inet 10.8.0.7/24 brd 10.8.0.255 scope global tun0

0

แก้ไขโปรไฟล์ OpenVPN ใน NetworkManager เปิดแท็บ IPv6 และเพิ่มเส้นทางด้วยตนเอง:

ที่อยู่: 2000 คำนำหน้า: 3 เกตเวย์: 0100 :: 1

2000 :: / 3 รวบรวมที่อยู่ IPv6 ที่สามารถกำหนดเส้นทางสู่สาธารณะได้ทั้งหมด 0100 :: / 64 คำนำหน้าเป็นคำนำหน้าพิเศษที่กำหนดให้ยกเลิกการรับส่งข้อมูล โดยพื้นฐานแล้วคุณจะต้องส่งทราฟฟิก IPv6 ทั้งหมดไปยังเกตเวย์ที่ไม่มีอยู่

Upside: ง่ายและอัตโนมัติอย่างสมบูรณ์

ข้อเสีย: บางแอปซึ่งเป็นเครื่องมือบรรทัดคำสั่งอาจไม่ถอยกลับไปเป็น IPv4 อย่างรวดเร็วเหมือนที่ต้องการเมื่อใช้วิธีนี้


0

ฉันต้องการปิดการใช้งาน IPv6 บนไคลเอนต์เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ OpenVPN มันเป็นไปได้?

ลองสคริปต์ตรงไปข้างหน้าของฉันฉันเพิ่งทำตอนนี้จะ

  • จัดการกับอินเทอร์เฟซทั้งหมด
  • ปิดการใช้งาน ipv6 เมื่อ OpenVPN เริ่มขึ้น
  • เปิดใช้งาน ipv6 เมื่อ OpenVPN สิ้นสุดลง
  • เข้ากันได้ดีกับอาร์กิวเมนต์ NetworkManager

หากยังคงมีที่อยู่ ipv6 ในอินเทอร์เฟซบางตัวไคลเอ็นต์ยังคงลองใช้การกำหนดเส้นทาง ipv6 แต่เนื่องจาก DNS ใช้ UDP มีโอกาสที่ DNS รั่วไหลที่ TCPwrapper ไม่สามารถจัดการปิดใช้งานได้

สคริปต์นี้ยังทำงานได้ดีกับอินเทอร์เฟซอื่น ๆ เนื่องจากไม่ได้ใช้อาร์กิวเมนต์ของ NetworkManager อีกต่อไปเช่น vpn-up vpn-down

สร้างไฟล์ที่ปฏิบัติการได้ใน /etc/NetworkManager/dispatcher.d/

sudo vim /etc/NetworkManager/dispatcher.d/v6d

วางรหัสด้านล่าง

#!/bin/bash
IF=$1
STATUS=$2
if [ "$IF" = "tun0" ];
then
case "$2" in
up)
for v6 in $(sysctl -a |grep ipv6|grep disable|sed 's/ \= 0/=1/'); do
sysctl -w $v6
done
;;
down)
for v6 in $(sysctl -a |grep ipv6|grep disable|sed 's/ \= 1/\=0/'); do
sysctl -w $v6
done
;;
esac
fi

จากนั้นทำให้สามารถเรียกใช้งานได้

sudo vim /etc/NetworkManager/dispatcher.d/v6d

PS OpenVPN พร้อมตัวจัดการเครือข่ายสูญเสียตัวเลือกมากมายของประโยชน์ OpenVPN จากเวอร์ชันบรรทัดคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.