Tôi có thể liên kết một khối (lớn) địa chỉ với một giao diện không?


26

Tôi biết rằng công cụ ip cho phép bạn liên kết nhiều địa chỉ với một giao diện (ví dụ: http://www.linuxplanet.com/linuxplanet/tutorials/6553/1/ ). Tuy nhiên, ngay bây giờ, tôi đang cố gắng xây dựng một cái gì đó trên IPv6 và sẽ rất hữu ích khi có sẵn toàn bộ khối địa chỉ (giả sử, a / 64), để các chương trình có thể chọn bất kỳ địa chỉ nào trong phạm vi và liên kết với điều đó. Không cần phải nói, việc gắn mọi IP từ phạm vi này vào một giao diện sẽ mất một thời gian.

Linux có hỗ trợ ràng buộc toàn bộ khối địa chỉ vào một giao diện không?


Các distro khác nhau có cách xử lý khác nhau này. Chọn một.
Ignacio Vazquez-Abrams

Ubuntu ngay bây giờ, nhưng các giải pháp hoạt động trên các bản phân phối được ưa thích, tất nhiên.
p-static

Hướng dẫn này liên kết một địa chỉ trong một khối (/ 24). / 24 chỉ xác định khối nào nằm trong. Nó sẽ hoạt động giống hệt với IPv6.
BillThor

Phân phối chéo sẽ là viết một tập lệnh sử dụng "ip addr add". Red Hat, Ubuntu và SuSE có các tập lệnh kết nối mạng khác nhau ...
Sean Reifschneider

1
@ChandraNakka Điều này có hữu ích với bạn không?
kasperd

Câu trả lời:


31

Linux 2.6.37 trở lên hỗ trợ điều này thông qua một tính năng gọi là AnyIP . Ví dụ nếu tôi chạy

ip route add local 2001:db8::/32 dev lo

trên máy Ubuntu 11.04, nó sẽ chấp nhận kết nối trên bất kỳ địa chỉ nào trong mạng 2001: db8 :: / 32.


1
Có giải pháp AnyIP nào cho ipv4 không?
Coaku

Nó có hoạt động trên Ubuntu 14.04 không?
Chandra Nakka

Điều này dường như hoạt động và tôi có thể ping phạm vi địa chỉ nhưng khi tôi chạy ip route listhoặc ip -6 route listtuyến đường đã thêm không hiển thị. Làm thế nào bạn sẽ liệt kê một khối địa chỉ AnyIP?
Colton

Điều này hoạt động cho các địa chỉ cục bộ nhưng tôi không thể ping hoặc truy cập các IP này từ các nguồn bên ngoài. Có cách nào khắc phục điều đó không? (Tôi đã thử thay thế lo bằng eth0 nhưng sau đó không có gì có thể truy cập được)
BrainStone

@BrainStone bạn cần cài đặt ndppd cho điều đó hoặc nhận tiền tố được định tuyến từ nhà cung cấp của bạn
Arya

6

Có, Linux hỗ trợ liên kết một khối địa chỉ mạng với giao diện mạng ... nhưng chỉ trên giao diện loopback. Vì vậy, bạn có thể làm điều này:

ip addr add 192.168.5.0/24 dev lo

Và sau đó làm điều này:

$ nmap -sP -oG - 192.168.5.0/24

# Nmap 5.21 scan initiated Tue Dec  7 11:38:28 2010 as: nmap -sP -oG - 192.168.5.0/24 
Host: 192.168.5.0 ()    Status: Up
Host: 192.168.5.1 ()    Status: Up
Host: 192.168.5.2 ()    Status: Up
[...]
Host: 192.168.5.254 ()  Status: Up
Host: 192.168.5.255 ()  Status: Up
# Nmap done at Tue Dec  7 11:38:46 2010 -- 256 IP addresses (256 hosts up) scanned in 0.11 seconds

Với các tuyến thích hợp, vị trí này sẽ thực hiện những gì bạn muốn ... cho các địa chỉ IPv4. Bạn đã hỏi về IPv6 và tôi không có bất kỳ kinh nghiệm nào về IPv6, nhưng rất có thể nó sẽ hoạt động theo cùng một cách.

Ban đầu tôi đọc về điều này ở đây (về phía dưới của bài viết). Lưu ý rằng bài viết này cũng thảo luận về cách gán rõ ràng nhiều địa chỉ cho một giao diện bằng các tính năng CentOS / Red Hat mà tôi chưa biết trước đây.


Mát mẻ! Tôi đã thử điều này với IPv6 trên Ubuntu (Lucid & Hardy) mà không gặp may mắn. Tôi nghĩ rằng đây sẽ là một tính năng giết người cho IPv6 - bạn có thể ánh xạ các địa chỉ làm đối tượng cơ sở dữ liệu hoặc sử dụng địa chỉ làm ID phiên.
Gerald Combs

2
Không, bạn không nên thêm địa chỉ vào lo. Thay vào đó, thêm một tuyến đường : ip -6 route add local <ip> dev lo.
Navin

2

Vì vậy, tôi thấy một vài lựa chọn ở đây:

  1. sử dụng tập lệnh để liên kết tất cả các địa chỉ với giao diện riêng lẻ

  2. định tuyến khối bạn muốn đến địa chỉ duy nhất của máy và sau đó cho máy đó sử dụng giao diện pcap để chặn tất cả lưu lượng truy cập cho khối đã nói (như thể đó là bộ định tuyến) và xử lý nó.

  3. Bạn có thể chơi các thủ thuật với các quy tắc NAT một cách ngẫu nhiên để sau đó viết lại một khối Ips được chuyển đến một máy thành một IP nội bộ duy nhất trên máy đó ... nhưng bạn vẫn sẽ kết thúc với một IP nội bộ trên mỗi IP mà bạn thực sự muốn trả chú ý, điều này khiến bạn quay lại giải pháp 1.

Nếu tôi là bạn, tôi chỉ cần viết tập lệnh nhỏ trong tùy chọn 1. Hoặc sử dụng tập lệnh từ đây :

#!/bin/sh
if [ "$#" -ne "4" ]; then
        echo Usage:
        echo " $0 interface ip range netmask"
        echo " examples:"
        echo "  1) Assuming you want to bind the IP range 192.168.0.1..192.168.0.254 to eth0 with netmask 255.255.255.0:"
        echo "  $0 eth0 192.168.0. 1..254 255.255.255.0"
        echo "  2) Assuming you want to bind the IPv6 range 2001:41d0:1:5000::1-2001:41d0:1:5000::254 to eth0 with netmask /56"
        echo "  $0 eth0 2001:41d0:1:5000:: 1..254 56"
else
        echo "Attempting to assign the IP range $2($3) to interface $1 with netmask $4"
        for ip in $(eval echo "{$3}"); do ifconfig -v $1 add $2$ip netmask $4; done
fi

một kịch bản như vậy sẽ được đặt tên ở đâu?
Skaperen

2

Như những người khác đã nói, bạn có thể sử dụng cơ chế AnyIP để định tuyến các gói đến cho toàn bộ mạng con đến giao diện localhost, nhưng hãy nhớ rằng bạn cũng cần phải có bộ định tuyến ngược dòng để định tuyến tất cả các gói mong muốn đến máy này trong nơi đầu tiên Điều này có thể được thực hiện đơn giản với các mục trong bảng định tuyến trên bộ định tuyến hoặc thông qua BGP. ARP không thực sự phù hợp nếu máy của bạn sẽ phải ARP cho từng IP riêng lẻ.


1

"Anyip" được mô tả ở trên không hoạt động với tôi trên centos 7. Tôi phải tạo một tập lệnh để tự tạo địa chỉ ipv6 khi khởi động. Để làm như vậy tôi đã thêm vào sau / etc / crontab:

@reboot root /path/to/bashscript

Đây là tập lệnh bash để tạo khoảng 3000 địa chỉ ipv6:

#!/bin/bash
INETP="2a00:xxxx:xxxx:xxxx::"
PRE="64"
INTE="eth0"
IP1=/sbin/ip
echo -n "Adding IPv6 addresses..."
for i in {3..3000}
do
$IP1 -6 addr add ${INETP}$(printf '%x\n' $i)/${PRE} dev ${INTE}
done
echo "Done!"

Phương pháp này chỉ hoạt động cho đến khi bạn đạt được khoảng 4000 địa chỉ. Nếu bạn cố gắng định cấu hình nhiều địa chỉ hơn thì nó sẽ không hoạt động. Có những kịch bản trong đó mong muốn chỉ định toàn bộ / 96 hoặc / 64 cho một máy chủ duy nhất, không có cách nào phương pháp của bạn sẽ mở rộng đến mức đó.
kasperd

@kasperd nơi bạn có thể làm cho cái gọi là cơ chế anyip "được mô tả" bởi Gerald Combs ở trên hoạt động trên Centos 7 hoặc Debian 8?
Nicolas Guérinet

1
Vâng, nó hoạt động. Nhưng có một vài bước hơn được đề cập trong câu trả lời đó. Xem câu trả lời của tôi cho một câu hỏi tương tự.
kasperd
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.