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:100
dan 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
POSTROUTING ... MASQUERADE
dinat
tabel. 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 ipv6
paket diizinkan dalam aturan IPv4 (!)?TRACE
target tabel mentah iptables (mungkin tidak begitu banyak di sini)ip neighbour
,, danip route get
. Juga, harap tentukan siapa yang melakukan pinggoogle.ca
.Jawaban:
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
eth0
tautan.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):
Anda harus mengaktifkan penerusan IPv6 di server:
Proksi NDP
Tampaknya router dikonfigurasi untuk mengirim seluruh rentang IPv6 Anda pada
eth0
tautan: Anda dapat mengatur proxy NDP.Anda harus melihat permintaan NDP pada
eth0
antarmuka 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:
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:
Dengan
learn-address
skrip berikut :Lihat utas ini .
Jawaban singkat
sumber