개요

개요

2.4.7내 서버에 openvpn이 있고 Ubuntu 20.04.2 LTS내 클라이언트는 openvpn이 있는 Archlinux입니다 2.5.1. IPv6 누출을 발견하여 몇 가지 연구 끝에 커널 수준에서 IPv6을 비활성화하지 않고 IPv6를 사용할 수 있도록 하기로 결정했습니다. 이 내 꺼야 server.conf:

local 127.0.0.1
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem
server-ipv6 2001:0db8:ee00:abcd::/64
tun-ipv6
push tun-ipv6
ifconfig-ipv6 2001:0db8:ee00:abcd::1 2001:0db8:ee00:abcd::2
push "route-ipv6 2001:0db8:ee00:ee00::2/64"
push "route-ipv6 2000::/3"

솔루션을 읽은 후 마지막 6줄이 추가되었습니다(IP는 튜토리얼에서 나온 것 외에 내 서버와 관련이 없습니다). 이 내 꺼야 client.ovpn:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

route server_ip 255.255.255.255 net_gateway

client
dev tun
proto tcp
sndbuf 0
rcvbuf 0
remote 127.0.0.1 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
comp-noadapt
auth-nocache
auth SHA512
key-direction 1
verb 3
<ca>
...
</tls-crypt>

내 클라이언트가 127.0.0.1 1194에 연결하는 이유는 1194에서 수신 대기 중인 stunnel을 사용하고 있기 때문입니다. 내가 방문할 때https://ipv6-test.comVPN이 없으면 ISP에서 IPv4와 IPv6를 모두 받습니다. VPN(및 추가된 6개 라인)을 사용하면 VPN 서버의 IPv4만 얻을 수 있고, IPv6을 사용하면 Not supportedVPN 서버에서 얻을 수 있는 결과를 얻을 수 있습니다. 지금까지는 커널 매개변수를 조작하지 않고 클라이언트를 사용할 때 최소한 IPv6가 비활성화되어 있었는데, IPv6도 사용할 수 있게 하고 싶습니다.

이 문제를 어떻게 해결할 수 있나요?

답변1

개요

이 튜토리얼에서는 VPN 내에서 IPv6를 작동시키는 데 관한 몇 가지 매우 중요한 사항을 간략하게 설명하고 있다고 생각합니다. 아래에서 복잡성을 설명하려고 노력할 것입니다. 하지만 먼저 이 작업을 수행하는 데 기본적으로 세 가지 방법이 있다는 점을 지적하겠습니다.

  1. 만들다수도꼭지VPN을 연결하고 이를 이더넷에 연결합니다(튜토리얼 보기).
  2. VPN에 사이트-로컬 IPv6 주소 블록을 할당하고(예 FEC0::/64: )VPN 서버를 IPv6 NAT 게이트웨이로 설정.
  3. VPN에 글로벌 인터넷 IPv6 주소 블록을 할당하고 서버의 라우터가 트래픽을 전달하도록 구성합니다.

브리지를 사용하여 TAP VPN 만들기

이 솔루션에는 최소한의 "gotyas"가 있으며 웹에서 튜토리얼을 따라하기가 간단해야 합니다. VPN은 패킷 헤더와 브로드캐스트 패킷을 보내야 하지만 TUN VPN은 그렇지 않다는 점에서 성능상의 단점이 있습니다.

사이트-로컬 IPv6 주소 블록 할당

이는 덜 표준적이지만 작동해야 합니다. 클라이언트는 VPN 서버의 IP를 가지고 있는 것으로 인터넷에서 표시됩니다. 그러나 낮은 기준으로 인해 제대로 작동하지 않으면 발생하는 문제에 대한 도움을 구할 가능성이 줄어듭니다.

VPN에 글로벌 IPv6 블록 할당

이렇게 하려면 ISP에서 할당한 대체 IPv6/64 블록이 있어야 합니다.

서버가 AWS와 같은 클라우드에 있는 경우 운이 좋지 않을 수 있습니다. AWS는 기본적으로 /56 블록을 할당하므로 서버에서 VPN에 /64 블록을 쉽게 할당할 수 있습니다.

VPN 서버가 집이나 사무실에 있는 경우 일부 ISP는 단일 /64 블록만 할당하므로 운이 좋지 않을 수 있습니다.

또한 VPN 서브넷으로 들어오는 모든 트래픽을 VPN 서버로 보내도록 서버의 라우터를 구성해야 합니다.

왜 그렇게 복잡합니까?

IPv6는 다릅니다

IPv4에서는 개인 IP 주소를 갖는 것이 일반적이며NAT 게이트웨이. 예를 들어, 홈 라우터에는 공개 IPv4 주소가 있고, 홈 WiFi에 있는 모든 장치(노트북, 휴대폰 등)에는 공개 IPv4 주소가 있습니다.현지의IPv4 주소. 이러한 장치 중 하나라도 인터넷에 액세스하면 홈 라우터는 장치의 로컬 IP 주소를 자체 공용 IP 주소로 바꿉니다.

NAT 게이트웨이는 IPv6에서는 일반적이지 않습니다.여전히 가능하지만.

대신 로컬 네트워크의 각 장치는 자체 글로벌 IPv6 주소로 구성됩니다. 로컬 네트워크(예: 가정용 WiFi)에는 (적어도) 전체 64비트 주소 블록이 할당됩니다. 그러나 일반적인 조언은 64비트 청크가 사용해야 하는 가장 작은 청크라는 것입니다.뭔가 작동이 멈출 수도 있어요.

이것이 왜 VPN과 관련이 있나요?

TUN VPN은 자체 네트워크(서브넷)이므로 자체적으로 할당된 IPv6 주소가 필요합니다. ISP가 큰 블록(예: /56 블록)을 할당하는 경우 VPN에 자체 /64 블록을 할당할 수 있습니다. 그러나 ISP가 /64 블록만 할당하는 것은 드문 일이 아닙니다.두 개가 필요해.

내가 말했듯이. /64 블록을 두 개의 /63 블록으로 분할할 수 있지만 그렇게 할 때 발생하는 위험은 사용자 본인의 책임입니다. 최소한 /63 블록에서는 "autoconfigure"를 사용할 수 없습니다.

무엇이 더 까다로울 수 있습니까?

서버가 IPv4와 마찬가지로 NAT 게이트웨이 역할을 하는 경우 VPN에 대한 정보로 서버의 라우터를 구성할 필요가 없습니다. 이는 각 VPN 클라이언트가 서버 네트워크에 서버와 동일한 IP를 갖는 것으로 나타나기 때문입니다. 따라서 라우터는 모든 VPN 클라이언트의 트래픽을 서버로 보내고 서버가 이를 알아낼 수 있도록 합니다.

...하지만 NAT가 없으면 VPN 클라이언트에는 자체 IP가 있으며 라우터가 기본적으로 인식하는 서브넷에도 없습니다. 그래서 당신은~ 해야 하다VPN 서브넷에 대한 트래픽을 VPN 서버로 보내도록 라우터에서 라우팅을 구성합니다.

관련 정보