Routing traffic ipv6 publik melalui terowongan openvpn

13

Yang saya coba lakukan adalah merutekan lalu lintas IPv6 melalui terowongan vpn. Dengan begitu, saya harus dapat menggunakan IPv6 di jaringan yang tidak mendukung IPv6.

Saya memiliki VPS yang memiliki blok IPv6 yang ditetapkan. Bagian dari blok ini yang ingin saya gunakan untuk klien openvpn. Rentang yang saya pikirkan adalah 2001:db8::111:800:0/112(awalan dianonimkan), karena openvpn hanya mendukung / 64 dan / 112 sebagai subnet.

IPv6 melalui terowongan sudah berfungsi, dari klien, saya bisa ping server ( 2001:db8::111:800:1), dan juga antarmuka di server ( 2001:db8::111:100:100dan 2001:db8:216:3dfa:f1d4:81c0).

Padahal, ketika mencoba melakukan ping google.com dari klien, saya tidak mendapat respons (waktu ping). Untuk men-debug masalah ini, saya telah menggunakan tcpdump untuk menangkap lalu lintas di server, dan saya bisa melihat paket ping keluar, tetapi tidak ada balasan yang datang kembali. Menambahkan aturan log ke ip6tables menunjukkan hal yang sama, paket keluar, tetapi tidak ada yang masuk.

Saya menggunakan alat traceroute online yang mendapat batas waktu dari server saya. Saya juga mencoba untuk mengatur ip langsung pada antarmuka, yang tidak mengakibatkan ip ( 2001:db8::111:800:1001) dapat dijangkau, jadi saya pikir ini adalah masalah routing.

Saya telah mengaktifkan penerusan untuk ipv6 melalui /proc/sys/net/ipv6/conf/all/forwarding. ip6tables memiliki kebijakan yang memungkinkan semua rantai.

Pertanyaan saya adalah, apa sebenarnya yang diperlukan linux untuk menerima paket untuk ip yang tidak ditugaskan ke antarmuka dan merutekannya lebih jauh? Hanya rute yang ada sepertinya tidak cukup.

Ini adalah pengaturan untuk klien dan server saya. Harap beri tahu jika diperlukan lebih banyak informasi.

Klien

# ip -6 addresses
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
    inet6 2001:db8::111:800:1001/112 scope global 
       valid_lft forever preferred_lft forever

# ip -6 routes
2001:db8::111:800:0/112 dev tun0  proto kernel  metric 256 
2000::/3 dev tun0  metric 1024 

Server

# ip -6 address
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2001:db8:216:3dfa:f1d4:81c0/64 scope global dynamic 
       valid_lft 86254sec preferred_lft 14254sec
    inet6 2001:db8::111:100:100/128 scope global 
       valid_lft forever preferred_lft forever
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
    inet6 2001:db8::111:800:1/112 scope global 
       valid_lft forever preferred_lft forever

# ip -6 route
2001:db8::111:100:100 dev eth0  proto kernel  metric 256 
2001:db8::111:800:0/112 dev tun0  proto kernel  metric 256 
2001:db8::/64 dev eth0  proto kernel  metric 256  expires 86194sec
default via fe80::230:48ff:fe94:d6c5 dev eth0  proto ra  metric 1024  expires 1594sec
Ikke
sumber
Mungkin Anda mencari POSTROUTING ... MASQUERADEdi nattabel. Tapi saya tidak yakin saya mengerti sepenuhnya. Apakah Anda mencoba melakukan tunnel traffic IPv6? Jika demikian, apakah Anda memiliki fasilitas masing-masing diatur? Apakah -p ipv6paket diizinkan dalam aturan IPv4 (!)?
0xC0000022L
Apakah Anda memiliki konfigurasi IP router (pada eth0)? Apakah Anda mengontrol router? (dapatkah Anda menambahkan rute?)
ysdx
Coba gunakan TRACEtarget tabel mentah iptables (mungkin tidak begitu banyak di sini) ip neighbour,, dan ip route get. Juga, harap tentukan siapa yang melakukan ping google.ca.
pilona
Ping google.com atau goole.com.?
totti
@totti google.com, adalah salah ketik
Ikke

Jawaban:

12

Anda perlu memberi tahu router Anda untuk menggunakan server Anda untuk subnet VPN ini: solusi yang tepat untuk masalah Anda adalah menambahkan rute pada router untuk subnet OpenVPN.

Jika Anda tidak dapat melakukan ini karena Anda tidak dapat menyentuh router, solusi lain adalah menyiapkan proxy NDP untuk klien pada eth0tautan.

Saat Anda menggunakan VPS, Anda mungkin tidak dapat menambahkan rute ke router: Anda mungkin harus menggunakan solusi kedua.

Tambahkan rute untuk subnet

Solusi yang tepat untuk masalah Anda adalah memberi tahu router bahwa subnet VPN harus dirutekan melalui server OpenVPN (ini untuk Linux):

ip route add 001:db8::111:800::/112 via 2001:db8::111:100:100

Anda harus mengaktifkan penerusan IPv6 di server:

sysctl sys.net.ipv6.conf.all.forwarding=1

Proksi NDP

Tampaknya router dikonfigurasi untuk mengirim seluruh rentang IPv6 Anda pada eth0tautan: Anda dapat mengatur proxy NDP.

Anda harus melihat permintaan NDP pada eth0antarmuka server untuk subnet OpenVPN Anda ketika mencoba mengakses internet dari klien.

Anda perlu mengaktifkan penerusan IPv6 di server juga dan proksi NDP:

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

subnet NDP proxy

Kernel Linux tidak memungkinkan untuk menambahkan proxy NDP untuk subnet tetapi hanya untuk IP individu. Anda dapat menggunakan daemon (seperti ndppd untuk mengatur proxy NDP untuk seluruh subnet (tidak pernah menggunakannya).

Per IP NDP proksi

Solusi lain adalah dengan dapat menambahkan proxy NDP untuk setiap IPv6 dari subnet VPN:

for i in $(seq 0 65535) ; do
  ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0
done

Ini akan berfungsi karena Anda memiliki jumlah IP yang relatif kecil di subnet OpenVPN.

Proxy NDP dinamis dengan kait OpenVPN

Anda harus dapat menggunakan kait OpenVPN untuk menambahkan NDP proxy dynamicaly.

Tambahkan kait di conf server OpenVPN:

learn-address /etc/openvpn/learn-address

Dengan learn-addressskrip berikut :

#!/bin/sh

action="$1"
addr="$2"

case "$action" in
    add | update)
        ip neigh replace proxy "$addr" dev tun0
        ;;
    delete)
        ip neigh del proxy "$addr" dev tun0
        ;;
esac

Lihat utas ini .

Jawaban singkat

for i in $(seq 0 65535) ; do
  ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0
done
ysdx
sumber
1
Terima kasih, saya akan memeriksanya. Saya sekarang mengerti masalahnya. ipsidixit.net/2010/03/24/239 berisi lebih banyak detail tentang ini.
Ikke
Saya memiliki ip dari klien sebagai tetangga proxy. Saya telah mengaktifkan sys.net.ipv6.conf.all.proxy_ndp, tetapi saya masih belum bisa melakukan ping google.com. Ketika saya memeriksa server, saya melihat paket-paket solusi ndp yang masuk pada eth0, tetapi tidak ada iklan yang keluar.
Ikke
1
Setelah menginstal dan mengatur npd6 tiba-tiba berfungsi!
Ikke