Làm cách nào để tắt IPv6 khi kết nối với máy chủ OpenVPN bằng Trình quản lý mạng trên hệ thống xếp chồng kép?


20

Tôi đang sử dụng ứng dụng khách OpenVPN thông qua plugin OpenVPN Network Manager trên ngăn xếp kép (có nghĩa là được định cấu hình cho cả kết nối IPv4 và IPv6) Ubuntu 13.10 để chuyển hướng tất cả lưu lượng truy cập thông qua VPN (cổng chuyển hướng). Nó thường hoạt động tốt.

Tuy nhiên, do IPv6 được hệ thống ưa thích, VPN "rò rỉ" và khi kết nối với các trang web cũng có sẵn trên IPv6 (như Google hoặc Wikipedia), trình duyệt kết nối trực tiếp.

Một giải pháp sẽ là cấu hình máy chủ OpenVPN để cung cấp kết nối IPv6. Mặc dù có thể với OpenVPN, plugin cho Trình quản lý mạng hiện không hỗ trợ nó.

Do kết nối IPv6 qua VPN không thực sự cần thiết, tôi chỉ muốn vô hiệu hóa IPv6 trên máy khách khi kết nối với máy chủ OpenVPN. Có thể không? Nếu vậy, làm thế nào tôi có thể làm điều đó?


1
VPN của bạn cũng không mang lưu lượng IPv6?
Michael Hampton


VPN của tôi có thể mang lưu lượng IPv6 nhưng Trình quản lý mạng hiện không hỗ trợ cấu hình IPv6 cho OpenVPN theo như tôi có thể nói.
Thiết bị đầu cuối chết tiệt

1
Chỉ để ghi lại, nếu nhà cung cấp VPN của bạn bị rò rỉ như thế này, bạn cần một nhà cung cấp mới. Có rất nhiều người trong số họ có được điều này đúng. IPv6 sẽ không biến mất và việc vô hiệu hóa nó sẽ chỉ khiến bạn bị loại khỏi các phần của Internet.
Michael Hampton

1
@MichaelHampton Đáng buồn thay, đó là máy chủ của tôi. Tôi là nhà cung cấp trong trường hợp này. Nó hỗ trợ IPv6 nhưng chỉ đi kèm với một / 64 vì vậy tôi sẽ cần phải ghép nó trước, điều này hơi khó khăn. Quan trọng hơn (vào thời điểm đó, tôi chưa kiểm tra), người quản lý mạng đã gặp một số rắc rối khi xử lý các kết nối OpenVPN hỗ trợ IPv6 (IPv6 qua VPN tuy nhiên hoạt động với thiết lập mạng tap và bắc cầu mà hiện tại tôi đang sử dụng).
Thiết bị đầu cuối chết tiệt

Câu trả lời:


15

Thêm phần này vào dòng kernel của bạn trong bộ tải khởi động để vô hiệu hóa IPv6 hoàn toàn:

ipv6.disable=1

Nếu bạn đang sử dụng Grub (nếu bạn chưa cài đặt trình tải khởi động của riêng mình, thì bạn đang sử dụng Grub), dòng kernel của bạn sẽ trông giống như thế này:

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

Cách tiếp cận được đề xuất, để thêm một cái gì đó vào dòng kernel, là thêm tham số kernel mong muốn vào GRUB_CMDLINE_LINUX_DEFAULTbiến trong /etc/default/grubtệp:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

Khi bạn đã thêm nó vào /etc/default/grub, hãy chạy lệnh sau để tạo lại grub.cfg:

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

Ngoài ra, việc thêm ipv6.disable_ipv6=1thay vào đó sẽ giữ chức năng ngăn xếp IPv6 nhưng sẽ không gán địa chỉ IPv6 cho bất kỳ thiết bị mạng nào của bạn.

HOẶC LÀ

Để tắt IPv6 qua sysctl, hãy đặt phần sau vào /etc/sysctl.conftệp của bạn :

net.ipv6.conf.all.disable_ipv6 = 1

Đừng quên nhận xét bất kỳ máy chủ IPv6 nào trong /etc/hoststệp của bạn :

#::1        localhost.localdomain   localhost

CHÚ THÍCH

khởi động lại có thể được yêu cầu cho phương pháp sysctl và chắc chắn cần phải khởi động lại cho phương pháp tiếp cận dòng kernel.

HOẶC LÀ

Để tạm thời vô hiệu hóa ipv6:

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

Để tạm thời kích hoạt nó:

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

Vì vậy, nếu bạn cần vô hiệu hóa ipv6 trong một điều kiện nhất định , hãy viết một tập lệnh bash ở đâu đó dọc theo các dòng này:

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

CHÚ THÍCH

Bạn có thể cần phải tắt bất kỳ máy chủ ipv6 nào trong /etc/hoststệp của mình cho phương thức này, giống như tôi đã đề xuất trong phương pháp trước.


5
Được. Nhưng tôi muốn tắt IPv6 khi kết nối với VPN bằng Trình quản lý mạng, chứ không phải giết hoàn toàn trên hệ thống của tôi. Có lẽ tôi nên làm cho nó rõ ràng hơn.
Thiết bị đầu cuối chết tiệt

@DamnTerminal, vì vậy bạn chỉ muốn tắt nó khi bạn kết nối với VPN của mình, vì việc vô hiệu hóa nó trên toàn hệ thống là ổn, miễn là nó chỉ xảy ra trong khi bạn kết nối với VPN?
Alexej Magura

@DamnTerminal Tôi đã cập nhật câu trả lời của mình để bao gồm một ví dụ về cách vô hiệu hóa ipv6 bằng cách sử dụng tập lệnh bash sẽ kiểm tra một điều kiện. Bạn có thể có thể sử dụng giao diện dòng lệnh của Trình quản lý mạng: nmcliđể kiểm tra xem bạn đã kết nối với VPN chưa; nếu điều đó không hoạt động thì tôi chắc chắn có một tiện ích mạng dòng lệnh ngoài đó sẽ cung cấp quyền truy cập vào thông tin đó.
Alexej Magura

Tại sao các downvote?
Alexej Magura

Thật không may, giải pháp này ( sysctl) không kích hoạt lại IPv6 cho WiFi đúng cách. Bạn cần kết nối lại với điểm truy cập để kích hoạt nó.
Igor Mikushkin

5

Bạn có thể tắt ipv6 ở cấp máy khách cho kết nối Trình quản lý mạng cụ thể bằng cách đặt tùy chọn IPv6 ipv6.method thành "bỏ qua"

// SOP: Tái tạo kết nối mạng LAN của tôi bằng FIXED IP 192.168.0.95 sang 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
Thật không may, nó không có hiệu lực cho các kết nối VPN.
Igor Mikushkin

0

Tôi đang sử dụng Ubuntu 16.04.03 LTS, kết nối với máy chủ Pi-Hole thông qua PiVPN.

Đây là những gì tôi đã làm để bật và tắt IPv6 tự động khi kết nối với VPN thông qua Trình quản lý mạng:

  1. Tạo một tập lệnh trong /etc/NetworkManager/dispatcher.d:

    $ sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    
  2. Thêm nội dung sau vào tệp (sửa đổi nội dung theo yêu cầu của bạn):

    #!/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. Làm cho tập lệnh thực thi:

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

Đó là nó. Tôi đã phải thêm thủ công DNS Pi-Hole của mình vì một dnsmasqlỗi ngăn không resolv.confđược cập nhật chính xác, vì vậy hãy sửa đổi các dòng được chỉ định nếu bạn thấy DNS của mình bị rò rỉ.


Thật không may, giải pháp này không kích hoạt lại IPv6 cho WiFi đúng cách. Bạn cần kết nối lại với điểm truy cập để kích hoạt nó.
Igor Mikushkin

0

Tôi nghĩ rằng sẽ ít xâm phạm hơn để vô hiệu hóa ip6 trong tệp khách hàng (chỉnh sửa client_conf_file.ovpn) để sửa đổi ngăn xếp tcp kernel.

Mở conf_file.ovpn của bạn và thêm các dòng sau:

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

Tôi đã thử nó và sau đó ipv6 biến mất.

Trước. Tôi chạy ip a |grep globalvà kết quả là:

    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

Sau. Tôi chạy ip a |grep globalvà kết quả là:

    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

Chỉnh sửa cấu hình OpenVPN trong Trình quản lý mạng, mở tab IPv6 và thêm thủ công tuyến đường:

Địa chỉ: 2000 Tiền tố: 3 Cổng: 0100 :: 1

2000 :: / 3 chụp tất cả các địa chỉ IPv6 có thể định tuyến công khai. 0100 :: / 64 tiền tố là tiền tố đặc biệt được chỉ định để loại bỏ lưu lượng. Về cơ bản, bạn sẽ gửi tất cả lưu lượng IPv6 đến một cổng không tồn tại.

Ưu điểm: dễ dàng và hoàn toàn tự động.

Nhược điểm: một số ứng dụng, cụ thể là các công cụ dòng lệnh, có thể không quay trở lại IPv4 nhanh như mong muốn khi phương thức này được sử dụng.


0

Tôi chỉ muốn vô hiệu hóa IPv6 trên máy khách khi kết nối với máy chủ OpenVPN. Có thể không?

Hãy thử kịch bản đơn giản của tôi, tôi vừa thực hiện, điều này sẽ,

  • Đối phó với toàn bộ giao diện.
  • Vô hiệu hóa ipv6 khi OpenVPN được khởi động.
  • Kích hoạt ipv6 khi OpenVPN kết thúc.
  • Khả năng tương thích tốt hơn với đối số NetworkManager.

Nếu vẫn còn địa chỉ ipv6 trên một số giao diện nhất định, máy khách vẫn thử định tuyến ipv6 nhưng vì DNS sử dụng UDP, có khả năng DNS Leak mà TCPwrapper không thể quản lý để vô hiệu hóa.

Kịch bản lệnh này cũng hoạt động tốt với các giao diện khác vì nó không còn dựa vào đối số của Trình quản lý mạng nữa, chẳng hạn như vpn-up vpn-down.

tạo một tệp thực thi trong /etc/NetworkManager/dispatcher.d/

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

dán mã dưới đây

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

sau đó làm cho nó thực thi

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

PS OpenVPN với Trình quản lý mạng sẽ mất rất nhiều tùy chọn lợi ích OpenVPN từ các phiên bản dòng lệnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.