Tôi đang cố gắng thiết lập nhiều vhost SSL SSL, mỗi cái trên một địa chỉ IPv6 khác nhau.
VPS CentOS7 của tôi có khối định tuyến / 64 IPv6 được gán cho nó, giả sử 2001:db8:acac:acac::/64
, và tôi đã có thể thấy các gói đến ( tcpdump -nn -i eth0 'ip6 and src or dst net 2001:db8:acac:acac::/64'
hiển thị các gói tốt).
Tôi biết rằng tôi có thể gán nhiều địa chỉ riêng lẻ như tôi muốn cho eth0 ( ip -6 addr add 2001:db8:acac:acac::1234 dev eth0
), nhưng tôi muốn giao diện cho phép các ứng dụng liên kết với bất kỳ địa chỉ nào trong số 2 ^ 64 địa chỉ.
Theo lời khuyên (xem các liên kết ở dưới cùng), tôi đã thêm quy tắc ( ip -6 rule add from 2001:db8:acac:acac::/64 iif eth0 lookup 200
) và tuyến đường ( ip route add local 2001:db8:acac:acac::/64 dev lo table 200
) và bây giờ tôi có thể có ping6
bất kỳ địa chỉ IP nào trong khối / 64 và tôi có thể kết nối với các dịch vụ nghe trên ký tự đại diện (ví dụ: :::22
ssh) bằng bất kỳ địa chỉ nào trong khối / 64.
Câu hỏi là: làm thế nào tôi có thể làm cho một chương trình liên kết với một địa chỉ duy nhất trong khối / 64? Vì không có giao diện nào sở hữu bất kỳ địa chỉ nào trong khối, tôi thấy các mục sau trong nhật ký apache:
... AH00072: make_sock: could not bind to address [2001:db8:acac:acac::1234]:443
Tôi đã thấy đề cập đến IP_TRANSPARENT
như một giải pháp khả thi, nhưng không thể tìm thấy đề cập này trong nguồn Apache, chỉ trong bits/in.h
, bao gồm bởi netinet/in.h
.
Có ai đã làm điều này để làm việc, cho Apache hoặc cho các ứng dụng khác (cụ thể là: dovecot, postfix, bind) chưa?
Các bài viết liên quan đọc trước khi đăng câu hỏi này:
- Serverfault: Tôi có thể liên kết một khối địa chỉ (lớn) với một giao diện không?
- git.kernel.org: Triển khai hỗ trợ Any-IP cho IPv6
apache2
nguồn và tôi không tìm thấy IP_FREEBIND
hoặc IP_TRANSPARENT
bất cứ nơi nào, vì vậy có vẻ như điều đó có thể không được hỗ trợ. Trong trường hợp đó, gán địa chỉ cho một số giao diện có thể là lựa chọn duy nhất.
SOL_IP
không sử dụng SOL_SOCKET
. Và bây giờ tôi có thể liên kết với bất kỳ địa chỉ!
memset(&serv_addr, 0, sizeof(serv_addr));
nên làm điều đó, nhưng phát hiện tốt. Tôi đã đăng mã kiểm tra đầy đủ trong một câu trả lời.
IP_FREEBIND
chức năng, bây giờ tôi đang cố gắng đẩy một số bản vá vào các nguồn chính thức. Đầu tiên là vào apr: Apache BugZilla bug 58725 .
lo
giao diện. Thật không may, nó chỉ hoạt động với IPv4 chứ không phải IPv6 - điều này thật mỉa mai vì có nhiều địa chỉ IP cho một máy chủ có thể sẽ xảy ra thường xuyên hơn với IPv6 so với IPv4. Tôi e rằng câu trả lời sẽ là một giải pháp sạch sẽ yêu cầu một hạt nhân được sửa đổi.