듀얼 스택 시스템에서 Network Manager를 사용하여 OpenVPN 서버에 연결할 때 IPv6을 비활성화하는 방법은 무엇입니까?


20

듀얼 스택에서 OpenVPN Network Manager 플러그인을 통해 OpenVPN 클라이언트를 사용하고 있습니다 (IPv4 및 IPv6 연결 모두에 대해 구성된 의미) Ubuntu 13.10은 VPN을 통해 모든 트래픽을 리디렉션 (리디렉트 게이트웨이)합니다. 일반적으로 잘 작동합니다.

그러나 시스템에서 IPv6을 선호하기 때문에 VPN이 "누설"되고 IPv6을 통해 사용 가능한 사이트 (예 : Google 또는 Wikipedia)에 연결할 때 브라우저가 직접 연결됩니다.

한 가지 해결책은 IPv6 연결을 제공하도록 OpenVPN 서버를 구성하는 것입니다. OpenVPN에서는 가능하지만 Network Manager 용 플러그인은 현재이를 지원하지 않습니다.

VPN을 통한 IPv6 연결이 반드시 필요한 것은 아니기 때문에 OpenVPN 서버에 연결할 때 클라이언트에서 IPv6을 비활성화하고 싶습니다. 가능합니까? 그렇다면 어떻게해야합니까?


1
VPN이 IPv6 트래픽도 전송하지 않습니까?
Michael Hampton


내 VPN은 IPv6 트래픽을 전달할 수 있지만 Network Manager는 현재 OpenVPN에 대해 IPv6 구성을 지원하지 않는 한 지원하지 않습니다.
젠장 터미널

1
기록을 위해 VPN 공급자가 이와 같이 누출되면 새 공급자가 필요합니다. 이 권리를 얻는 많은 사람들이 있습니다. IPv6은 사라지지 않으며 비활성화하면 인터넷의 일부만 차단됩니다.
Michael Hampton

1
@MichaelHampton 슬프게도, 그것은 내 서버입니다. 이 경우 제공자입니다. IPv6는 지원하지만 / 64 하나만 제공되므로 먼저 약간의 연결이 필요합니다. 더 중요한 것은 (당시 확인하지 않았 음) 네트워크 관리자는 IPv6 가능 OpenVPN 연결을 처리하는 데 어려움을 겪었습니다 (VPN을 통한 IPv6는 현재 사용하는 탭 및 브리지 네트워크 설정에서 작동합니다).
젠장 터미널

답변:


15

IPv6를 비활성화하려면 부트 로더 의 커널 라인 에 추가하십시오 :

ipv6.disable=1

Grub을 사용하는 경우 (자신의 부트 로더를 설치하지 않은 경우 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 스택이 작동하지만 네트워크 장치에 IPv6 주소가 할당되지는 않습니다.

또는

sysctl을 통해 IPv6을 비활성화하려면 /etc/sysctl.conf파일에 다음을 배치 하십시오.

net.ipv6.conf.all.disable_ipv6 = 1

/etc/hosts파일 에서 IPv6 호스트를 주석 처리하는 것을 잊지 마십시오 .

#::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를 비활성화 해야하는 경우 다음 줄을 따라 bash 스크립트를 작성하십시오.

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

노트

/etc/hosts이전 방법에서 권장 한 것처럼이 방법으로 파일 에서 ipv6 호스트를 비활성화해야 할 수도 있습니다 .


5
그래 좋아. 그러나 Network Manager를 사용하여 VPN에 연결할 때 IPv6을 비활성화하고 시스템에서 완전히 종료하지는 않습니다. 어쩌면 내가 더 명확하게 만들어야했을 것입니다.
젠장 터미널

@DamnTerminal, 당신은 당신이 당신의 VPN에 연결되어있는 동안에 만 발생하는 한, 시스템 전체에서 사용하지 않도록 설정하는 것이 좋기 때문에 당신이 당신의 VPN에 연결되어있을 때만 사용하지 않으시겠습니까?
Alexej Magura

@DamnTerminal 조건을 확인하는 bash 스크립트를 사용하여 ipv6을 비활성화하는 방법의 예를 포함하도록 답변을 업데이트했습니다. NetworkManager의 명령 행 인터페이스를 사용할 수 있습니다 nmcli. VPN에 연결되어 있는지 확인하십시오. 그래도 작동하지 않으면 해당 정보에 액세스 할 수있는 명령 줄 네트 유틸리티가 있다고 확신합니다.
Alexej Magura 1

왜 공감해야합니까?
Alexej Magura 2016 년

불행히도이 솔루션 ( sysctl)은 WiFi에 IPv6을 올바르게 다시 활성화하지 않습니다. 활성화하려면 액세스 포인트에 다시 연결해야합니다.
Igor Mikushkin

5

IPv6 옵션 ipv6.method를 "ignore"로 설정하여 특정 Network Manager 연결 에 대해 클라이언트 레벨에서 ipv6을 사용하지 않을 수 있습니다.

// SOP : FIXED IP 192.168.0.95를 사용하여 이더넷에 LAN 연결을 다시 만듭니다. ````

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에 있으며 PiVPN을 통해 Pi-Hole 서버에 연결합니다.

이것은 Network Manager를 통해 VPN에 연결할 때 IPv6을 자동으로 켜고 끄는 작업입니다.

  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
    

그게 다야. 올바르게 업데이트되지 dnsmasq않는 버그로 인해 Pi-Hole DNS를 수동으로 추가해야했기 때문에 resolv.confDNS 유출이 발견되면 표시된 줄을 수정하십시오.


불행히도이 솔루션은 WiFi 용 IPv6을 올바르게 다시 활성화하지 않습니다. 활성화하려면 액세스 포인트에 다시 연결해야합니다.
Igor Mikushkin

0

커널 tcp 스택을 수정하는 클라이언트 파일 (edit client_conf_file.ovpn 편집)에서 ip6을 비활성화하는 것이 덜 방해 적이라고 생각합니다.

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

NetworkManager에서 OpenVPN 프로파일을 편집하고 IPv6 탭을 열고 경로를 수동으로 추가하십시오.

주소 : 2000 접두사 : 3 게이트웨이 : 0100 :: 1

2000 :: / 3은 공개적으로 라우팅 가능한 모든 IPv6 주소를 캡처합니다. 0100 :: / 64 접두사는 트래픽을 삭제하도록 지정된 특수 접두사입니다. 기본적으로 모든 IPv6 트래픽을 존재하지 않는 게이트웨이로 보냅니다.

거꾸로 : 쉽고 완전 자동.

단점 :이 방법을 사용할 때와 같이 일부 앱, 즉 명령 줄 도구는 IPv4로 빠르게 대체되지 않을 수 있습니다.


0

OpenVPN 서버에 연결할 때 클라이언트에서 IPv6을 비활성화하고 싶습니다. 가능합니까?

방금 작성한 간단한 스크립트를 사용해보십시오.

  • 전체 인터페이스를 다루십시오.
  • OpenVPN이 시작되면 ipv6을 비활성화하십시오.
  • OpenVPN이 종료되면 ipv6을 활성화하십시오.
  • NetworkManager 인수와의 호환성이 향상되었습니다.

특정 인터페이스에 여전히 ipv6 주소가있는 경우 클라이언트는 여전히 ipv6 라우팅을 시도하지만 DNS가 UDP를 사용함에 따라 TCPwrapper가 비활성화 할 수없는 DNS 누출 가능성이 있습니다.

이 스크립트는 vpn-up vpn-down과 같은 NetworkManager의 인수에 더 이상 의존하지 않기 때문에 다른 인터페이스와도 잘 작동합니다.

/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

Network Manager가 포함 된 PS OpenVPN은 명령 행 버전에서 많은 OpenVPN 혜택 옵션을 잃습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.