Bagaimana cara menonaktifkan IPv6 saat menghubungkan ke server OpenVPN menggunakan Network Manager pada sistem dual-stack?

20

Saya menggunakan klien OpenVPN melalui plugin OpenVPN Network Manager pada dual stack (artinya dikonfigurasi untuk konektivitas IPv4 dan IPv6) Ubuntu 13.10 untuk mengarahkan ulang semua lalu lintas melalui VPN (redirect-gateway). Biasanya berfungsi dengan baik.

Namun, karena fakta bahwa IPv6 lebih disukai oleh sistem, VPN "bocor" dan ketika terhubung ke situs yang juga tersedia melalui IPv6 (seperti Google, atau Wikipedia), peramban terhubung langsung.

Salah satu solusinya adalah dengan mengkonfigurasi server OpenVPN untuk menyediakan konektivitas IPv6. Meskipun dimungkinkan dengan OpenVPN, plugin untuk Network Manager saat ini tidak mendukungnya.

Karena konektivitas IPv6 melalui VPN tidak sepenuhnya diperlukan, saya ingin menonaktifkan IPv6 pada klien saat menghubungkan ke server OpenVPN. Apa itu mungkin? Jika demikian, bagaimana saya bisa melakukannya?

Terminal Sial
sumber
1
VPN Anda tidak membawa lalu lintas IPv6 juga?
Michael Hampton
VPN saya mungkin bisa membawa lalu lintas IPv6 tetapi Network Manager tidak mendukung konfigurasi IPv6 saat ini untuk OpenVPN sejauh yang saya tahu.
Terminal
1
Sebagai catatan, jika penyedia VPN Anda bocor seperti ini, Anda memerlukan penyedia baru. Ada banyak dari mereka yang melakukan ini dengan benar. IPv6 tidak akan hilang, dan menonaktifkannya hanya akan membuat Anda terputus dari bagian-bagian Internet.
Michael Hampton
1
@MichaelHampton Sedihnya, ini server saya. Saya adalah penyedia dalam hal ini. Memang mendukung IPv6 tetapi hanya hadir dengan satu / 64 jadi saya harus menyambungkannya terlebih dahulu yang agak menyusahkan. Lebih penting lagi (pada saat itu, saya belum memeriksa sejak) manajer jaringan memiliki beberapa masalah menangani koneksi OpenVPN yang diaktifkan IPv6 (IPv6 over VPN tidak bekerja dengan pengaturan jaringan tap dan bridged yang merupakan apa yang saya gunakan sekarang).
Damn Terminal

Jawaban:

15

Tambahkan ini ke baris kernel Anda di boot loader Anda untuk menonaktifkan IPv6 sama sekali:

ipv6.disable=1

Jika Anda menggunakan Grub (jika Anda belum menginstal boot-loader Anda sendiri, maka Anda menggunakan Grub), baris kernel Anda akan terlihat seperti ini:

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

Pendekatan yang disarankan, untuk menambahkan sesuatu ke baris kernel, adalah menambahkan parameter kernel yang diinginkan ke GRUB_CMDLINE_LINUX_DEFAULTvariabel dalam /etc/default/grubfile:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

Setelah Anda menambahkannya ke /etc/default/grub, jalankan perintah berikut untuk membuat ulang grub.cfg:

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

Atau, menambahkan ipv6.disable_ipv6=1bukan akan membuat tumpukan IPv6 berfungsi tetapi tidak akan menetapkan alamat IPv6 ke perangkat jaringan Anda.

ATAU

Untuk menonaktifkan IPv6 via sysctl, tempatkan yang berikut ini ke /etc/sysctl.conffile Anda :

net.ipv6.conf.all.disable_ipv6 = 1

Jangan lupa untuk mengomentari host IPv6 di /etc/hostsfile Anda :

#::1        localhost.localdomain   localhost

CATATAN

reboot mungkin diperlukan untuk metode sysctl, dan reboot pasti diperlukan untuk pendekatan garis kernel.

ATAU

Untuk menonaktifkan sementara ipv6:

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

Untuk mengaktifkannya untuk sementara :

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

Jadi jika Anda perlu menonaktifkan ipv6 pada kondisi tertentu , maka tulis skrip bash di suatu tempat di sepanjang baris berikut:

#!/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

CATATAN

Anda mungkin perlu menonaktifkan host ipv6 dalam /etc/hostsfile Anda untuk metode ini juga, seperti yang saya sarankan dalam metode sebelumnya.

Alexej Magura
sumber
5
Ya baiklah. Tapi saya ingin menonaktifkan IPv6 saat menghubungkan ke VPN menggunakan Network Manager, tidak membunuhnya sepenuhnya pada sistem saya. Mungkin seharusnya saya membuatnya lebih jelas.
Damn Terminal
@ DamnTerminal, jadi Anda hanya ingin menonaktifkannya ketika Anda terhubung ke VPN Anda, karena dalam menonaktifkannya seluruh sistem baik-baik saja, asalkan itu hanya terjadi saat Anda terhubung ke VPN Anda?
Alexej Magura
@ DamnTerminal Saya memperbarui jawaban saya untuk menyertakan contoh cara menonaktifkan ipv6 menggunakan skrip bash yang akan memeriksa suatu kondisi. Anda mungkin dapat menggunakan antarmuka baris perintah NetworkManager: nmcliuntuk memeriksa apakah Anda terhubung ke VPN; jika itu tidak berhasil maka saya yakin ada utilitas bersih command-line di luar sana yang akan memberikan akses ke info itu.
Alexej Magura
Mengapa downvote?
Alexej Magura
Sayangnya solusi ini ( sysctl) tidak mengaktifkan kembali IPv6 untuk WiFi dengan benar. Anda perlu menyambung kembali ke jalur akses untuk mengaktifkannya.
Igor Mikushkin
5

Anda dapat menonaktifkan ipv6 di tingkat klien untuk koneksi Network Manager tertentu dengan mengatur opsi IPv6 ipv6. Metode untuk "abaikan"

// SOP: Buat kembali koneksi LAN saya menggunakan FIXED IP 192.168.0.95 ke 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

`` ``

Rolf
sumber
1
Sayangnya itu tidak berpengaruh untuk koneksi VPN.
Igor Mikushkin
0

Saya menggunakan Ubuntu 16.04.03 LTS, menghubungkan ke server Pi-Hole melalui PiVPN.

Inilah yang saya lakukan untuk mengaktifkan dan menonaktifkan IPv6 secara otomatis saat menghubungkan ke VPN melalui Network Manager:

  1. Buat skrip di /etc/NetworkManager/dispatcher.d:

    $ sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    
  2. Tambahkan konten berikut ke dalam file (modifikasi konten untuk kebutuhan Anda):

    #!/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. Jadikan skrip dapat dieksekusi:

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

Itu dia. Saya harus menambahkan DNS Pi-Hole secara manual karena ada dnsmasqbug yang mencegah resolv.confpembaruan dengan benar, jadi ubah baris yang ditunjukkan jika Anda menemukan DNS Anda bocor.

ooknosi
sumber
Sayangnya solusi ini tidak mengaktifkan kembali IPv6 untuk WiFi dengan benar. Anda perlu menyambung kembali ke jalur akses untuk mengaktifkannya.
Igor Mikushkin
0

Saya pikir itu kurang intrusif untuk menonaktifkan ip6 di file klien (edit client_conf_file.ovpn) yang memodifikasi stack tcp kernel.

Buka conf_file.ovpn Anda dan tambahkan baris ikuti:

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

Saya mencobanya dan setelah ini IPv6 menghilang.

Sebelum. Saya menjalankan ip a |grep globaldan hasilnya adalah:

    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

Setelah. Saya menjalankan ip a |grep globaldan hasilnya adalah:

    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
Em50L
sumber
0

Edit profil OpenVPN di NetworkManager, buka tab IPv6 dan tambahkan rute secara manual:

Alamat: 2000 Awalan: 3 Gerbang: 0100 :: 1

2000 :: / 3 menangkap semua alamat IPv6 yang dapat dirutekan secara publik. 0100 :: / 64 awalan adalah awalan khusus yang ditujukan untuk membuang lalu lintas. Pada dasarnya Anda akan mengirim semua lalu lintas IPv6 ke gateway yang tidak ada.

Terbalik: mudah dan sepenuhnya otomatis.

Kelemahan: beberapa aplikasi, yaitu alat baris perintah, mungkin tidak mundur ke IPv4 secepat yang diinginkan ketika metode ini digunakan.

Niels
sumber
0

Saya ingin menonaktifkan IPv6 pada klien saat menghubungkan ke server OpenVPN. Apa itu mungkin?

Coba skrip lurus ke depan yang baru saya buat sekarang, ini akan,

  • Menangani seluruh antarmuka.
  • Nonaktifkan ipv6 ketika OpenVPN dimulai.
  • Aktifkan ipv6 ketika OpenVPN berakhir.
  • Kompatibilitas yang lebih baik dengan argumen NetworkManager.

Jika masih ada alamat ipv6 pada antarmuka tertentu, klien masih mencoba routing ipv6 tetapi karena DNS menggunakan UDP, ada kemungkinan Kebocoran DNS yang TCPwrapper tidak berhasil untuk menonaktifkan.

Script ini juga bekerja dengan baik dengan antarmuka lain karena tidak bergantung pada argumen NetworkManager lagi, seperti vpn-up vpn-down.

buat file yang dapat dieksekusi di /etc/NetworkManager/dispatcher.d/

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

rekatkan kode di bawah ini

#!/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

kemudian membuatnya bisa dieksekusi

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

PS OpenVPN dengan Network Manager kehilangan banyak opsi manfaat OpenVPN dari versi baris perintah.

Seandex
sumber