Định tuyến lưu lượng ipv6 công cộng qua đường hầm openvpn


13

Những gì tôi đang cố gắng làm là định tuyến lưu lượng IPv6 qua một đường hầm vpn. Bằng cách đó, tôi sẽ có thể sử dụng IPv6 trong một mạng không hỗ trợ IPv6.

Tôi có một VPS có khối IPv6 được chỉ định. Một phần của khối này tôi muốn sử dụng cho các máy khách openvpn. Phạm vi tôi có trong tâm trí là 2001:db8::111:800:0/112(tiền tố được ẩn danh), bởi vì openvpn chỉ hỗ trợ / 64 và / 112 dưới dạng mạng con.

IPv6 thông qua đường hầm đã hoạt động, từ máy khách, tôi có thể ping máy chủ ( 2001:db8::111:800:1) và cả giao diện trên máy chủ ( 2001:db8::111:100:1002001:db8:216:3dfa:f1d4:81c0).

Mặc dù, khi cố gắng ping google.com từ máy khách, tôi không nhận được phản hồi (hết thời gian ping). Để gỡ lỗi sự cố này, tôi đã sử dụng tcpdump để nắm bắt lưu lượng truy cập trên máy chủ và tôi có thể thấy các gói ping đi ra ngoài, nhưng không có phản hồi nào được trả lại. Thêm quy tắc nhật ký vào ip6tables cho thấy tương tự, các gói đi ra ngoài, nhưng không có gì đến.

Tôi đã sử dụng một công cụ theo dõi trực tuyến có thời gian chờ từ máy chủ của tôi. Tôi cũng đã cố gắng đặt ip trực tiếp trên giao diện, điều này dẫn đến ip ( 2001:db8::111:800:1001) có thể truy cập được, vì vậy tôi nghĩ rằng đây là một vấn đề định tuyến.

Tôi đã kích hoạt chuyển tiếp cho ipv6 thông qua /proc/sys/net/ipv6/conf/all/forwarding. ip6tables có chính sách cho phép cho tất cả các chuỗi.

Câu hỏi của tôi là, chính xác những gì cần thiết cho linux để chấp nhận gói đó cho một ip không được gán cho một giao diện và định tuyến nó hơn nữa? Chỉ cần một tuyến đường tồn tại dường như không đủ.

Đây là thiết lập cho khách hàng và máy chủ của tôi. Xin vui lòng cho nó biết nếu cần thêm thông tin.

Khách hàng

# 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 

Người phục vụ

# 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

Có thể bạn đang tìm kiếm POSTROUTING ... MASQUERADEtrong natbảng. Nhưng tôi không chắc là tôi hiểu hoàn toàn. Bạn đang cố gắng tạo đường hầm lưu lượng IPv6? Nếu vậy, bạn có các cơ sở tương ứng được thiết lập? Các -p ipv6gói được phép trong quy tắc IPv4 (!)?
0xC0000022L

Bạn có cấu hình IP của bộ định tuyến (trên eth0) không? Bạn có điều khiển bộ định tuyến không? (bạn có thể thêm các tuyến đường không?)
ysdx

Hãy thử sử dụng TRACEmục tiêu bảng thô iptables (có thể không quá nhiều ở đây) ip neighbour, và ip route get. Ngoài ra, xin vui lòng xác định ai là ping google.ca.
pilona

Ping google.com hoặc goole.com.?
totti

@totti google.com, là một lỗi đánh máy
Ikke

Câu trả lời:


12

Bạn cần nói với bộ định tuyến của mình sử dụng máy chủ của bạn cho mạng con VPN này: giải pháp chính xác cho vấn đề của bạn là thêm một tuyến đường trên bộ định tuyến cho mạng con OpenVPN.

Nếu bạn không thể làm điều này vì bạn không thể chạm vào bộ định tuyến, một giải pháp khác là thiết lập proxy NDP cho các máy khách trên eth0liên kết.

Khi bạn đang sử dụng VPS, có lẽ bạn không thể thêm tuyến vào bộ định tuyến: bạn có thể phải sử dụng giải pháp thứ hai.

Thêm một tuyến đường cho mạng con

Giải pháp chính xác cho vấn đề của bạn là thông báo cho bộ định tuyến rằng mạng con VPN phải được định tuyến qua máy chủ OpenVPN (đây là cho Linux):

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

Bạn phải kích hoạt chuyển tiếp IPv6 trên máy chủ:

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

Proxy NDP

Có vẻ như bộ định tuyến được cấu hình để gửi toàn bộ phạm vi IPv6 của bạn trên eth0liên kết: bạn có thể thiết lập proxy NDP.

Bạn sẽ thấy các yêu cầu NDP trên eth0giao diện của máy chủ cho mạng con OpenVPN của bạn khi cố gắng truy cập phần còn lại của internet từ máy khách.

Bạn cũng cần bật chuyển tiếp IPv6 trên máy chủ và proxy NDP:

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

mạng con NDP proxy

Nhân Linux không cho phép thêm proxy NDP cho mạng con mà chỉ cho các IP riêng lẻ. Bạn có thể sử dụng một daemon (chẳng hạn như ndppd để thiết lập proxy NDP cho toàn bộ mạng con (không bao giờ sử dụng nó).

Mỗi proxy NDP IP

Một giải pháp khác là có thể thêm proxy NDP cho mỗi IPv6 của mạng con VPN:

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

Điều này sẽ hoạt động khi bạn có số lượng IP tương đối nhỏ trong mạng con OpenVPN.

Proxy NDP động với móc OpenVPN

Bạn sẽ có thể sử dụng các móc nối OpenVPN để thêm tính năng động của proxy NDP.

Thêm hook trong máy chủ OpenVPN conf:

learn-address /etc/openvpn/learn-address

Với đoạn learn-addressscript sau :

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

Xem chủ đề này .

Câu trả lời ngắn

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

1
Cảm ơn, tôi sẽ xem xét nó. Bây giờ tôi hiểu vấn đề. ipsidixit.net/2010/03/24/239 chứa nhiều chi tiết hơn về điều này.
Ikke

Tôi có ip từ khách hàng là proxy hàng xóm. Tôi đã kích hoạt sys.net.ipv6.conf.all.proxy_ndp, nhưng tôi vẫn không thể ping google.com. Khi tôi kiểm tra máy chủ, tôi thấy các gói giải pháp ndp bắt đầu trên eth0, nhưng không có quảng cáo nào xuất hiện.
Ikke

1
Sau khi cài đặt và thiết lập npd6, nó đột nhiên hoạt động!
Ikke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.