VPS에서 IPv6를 사용하는 OpenVPN

VPS에서 IPv6를 사용하는 OpenVPN

Debian Sid에서 OpenVPN을 사용하여 IPv6 터널을 생성하려고 합니다. IPv4는 잘 작동하지만 IPv6을 작동시킬 수 없습니다. IPv6을 사용하여 서버와 다른 클라이언트에 ping을 실행할 수 있지만 클라이언트에서 인터넷에 액세스할 수 없습니다.

몇 시간 동안 연구했지만 여전히 IPv6를 완전히 이해하지 못하므로 이 문제는 쉽게 해결할 수 있습니다. 설명도 해주시면 좋을 것 같아요!

문제는 VPS를 사용하고 있고 모든 것을 처리할 수 있는 /64 서브넷만 있다는 것입니다.

2a00:a123:4:b5::/64

그래서 이것을 OpenVPN 구성에 추가할 수 있다고 생각했습니다( /112OpenVPN을 위한 더 작은 서브넷 생성).

server-ipv6 2a00:a123:4:b5:80::/112
push "route-ipv6 2000::/3"

이제 실행하면 ifconfig tun0다음을 얻습니다.

inet6 addr: 2a00:d880:6:f2:80::1/112 Scope:Global

내 고객은 다음을 얻습니다.

client1,10.8.0.2,2a00:d880:6:f2:80::1000
client2,10.8.0.3,2a00:d880:6:f2:80::1001

SolusVM CP에 이 4개의 IP를 모두 추가했습니다. (필요한지는 모르겠지만 VPS로 다시 라우팅하기 위한 것 같습니다.) 저도 net.ipv6.conf.all.forwarding로 설정했습니다 1.

그래도 클라이언트에서 IPv6를 통해 인터넷에 액세스할 수 없습니다. traceroute6 google.com클라이언트에서 실행 하면 서버 IP를 얻지만 그 후에는 시간이 초과됩니다.

나도 이걸 찾았어유제, 그러나 NDP 프록시를 사용하는 것이 나에게 적합하지 않은 것 같습니다.

ip neigh add proxy 2a00:d880:6:f2:80::1000 dev tun0
ip neigh add proxy 2a00:d880:6:f2:80::1001 dev tun0

답변1

나는 또한 SNAT가 올바른 선택이라고 생각하지 않습니다. 비슷한 문제가 있었는데 올바른 전달 규칙과 몇 가지 조정이 필요하다는 것을 알았습니다. 기본적으로 OpenVPN 인터페이스에서 IPv6가 설정된 외부 WAN 인터페이스로 IPv6 트래픽을 전달하기만 하면 됩니다.

ip6tables는 VPS를 통한 OpenVPN의 IPv6 트래픽을 허용합니다.

귀하의 경우에는 이것이 더 잘 작동할 것이라고 생각합니다.

ip6tables -A FORWARD -m state --state NEW -i tun+ -o $WAN -s 2a00:a123:4:b5::/64 -j ACCEPT
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

이더넷 브리징(tap) 대신 라우팅(tun)을 사용하고 있다고 가정합니다.

필요한 유일한 FORWARD 규칙인 /64 블록만 있는 것 같습니다.

$WAN은 IPv6 연결을 사용하는 외부 인터페이스에 대한 자리 표시자입니다. 내 VPS에는 기본 IPv6가 없으므로 내 경우에는 터널 인터페이스 sat1(CentOS)입니다. IPv6 블록이 있는 것 같으므로 외부 WAN 인터페이스가 될 것입니다.

올바른 전달 규칙이 적용되면 IPv6 트래픽은 방화벽에 의해 차단되지 않고 통과될 수 있습니다. 대부분의 경우 NAT는 IPv6와 관련될 필요가 없습니다.

답변2

먼저 Proxy_ndp를 활성화해야 합니다.

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

(그리고 해당 라인을 에 추가합니다 /etc/sysctl.conf).

그러면 올바른 명령은 다음과 같습니다.

ip neigh add proxy 2a00:d880:6:f2:80::1000 dev eth0
ip neigh add proxy 2a00:d880:6:f2:80::1001 dev eth0

이것이 eth0OpenVPN이 아닌 네트워크 장치의 이름이라고 가정합니다.

이는 호스트가 장치에 NDP 프록시 서비스를 제공해야 함을 의미합니다 eth0.

  • 누군가 dev0 링크에서 "2a00:d880:6:f2:80::1000"을 요청하면 "예, 나입니다"라고 말해야 합니다.

  • 이는 호스트가 eth0 링크에서 2a00:d880:6:f2:80::1000 패킷을 수신한다는 의미입니다.

  • 어떤 인터페이스가 실제로 2a00:d880:6:f2:80::1000인지 알려줄 필요는 없습니다. IPv6 라우팅 테이블이 올바른 경로를 적절한 대상으로 라우팅하는 작업을 처리합니다.

그리고 IPv6 IP 전달을 활성화하는 것을 잊지 마세요:

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

답변3

글쎄요, 몇 시간 동안 노력한 끝에 저는 간단한 일 하나를 하는 것을 잊어버렸습니다. 방화벽 규칙을 추가합니다.

ip6tables -t nat -A POSTROUTING -s 2a00:a123:4:b5:80::/112 -j SNAT --to 2a00:a123:4:b5::1234

SolusVM CP에 IP를 추가할 필요가 없습니다. NDP 프록시도 불필요합니다.

관련 정보