Linux: Có cách nào hữu ích để thực hiện một chương trình ràng buộc nó với địa chỉ IP bạn chọn không?


11

Trong FreeBSD 4.9, rất dễ thực hiện chỉ bằng một lệnh như

jail [-u username]  path hostname ip-number command

nếu đường dẫn là /bạn đã chạy cùng một chương trình như bình thường nhưng tất cả các giao tiếp mạng của nó bị hạn chế chỉ sử dụng địa chỉ IP được cung cấp làm nguồn. Đôi khi nó rất tiện dụng.

Bây giờ trong Linux có LXC, trông rất giống với FreeBSD jail(hoặc vùng của Solaris) - bạn có thể nghĩ ra cách tương tự để thực hiện chương trình không?


Chương trình nào bạn đang cố gắng để làm điều này với? Nhiều chương trình có thể cấu hình đủ để chúng có thể được cho biết IP nào sẽ liên kết.
Warren Young

@WarrenYoung, Cảm ơn KO, nhưng "nhiều"! = "Tất cả"
poige

Một trường hợp sử dụng tốt để "bỏ tù" một thực thi để sử dụng một IP cụ thể đang chạy nhiều máy chủ trò chơi trên một máy trong một nhóm LAN. Ví dụ: các trò chơi của Valve chỉ phát trên các cổng 27015-27020, vì vậy mỗi IP bạn chỉ có thể có 6 máy chủ. Vì vậy, bạn thêm IP ảo trên một NIC nhưng sau đó bạn cần chỉ định "+ ip <address>" trên dòng lệnh của máy chủ trò chơi sẽ ngừng phát hiện diện của nó cho khách hàng => không có máy chủ nào hiển thị trong trình duyệt LAN. Vì vậy, "+ ip" sẽ không hoạt động. Do đó, chúng ta cần phải bẻ khóa mỗi máy chủ trong một môi trường nơi nó chỉ có thể tìm thấy 1 địa chỉ IP. Kết quả: không có giới hạn trong #servers + khách hàng xem tất cả các máy chủ.
Timmos

Câu trả lời:


12

Bắt đầu quá trình bên trong một không gian tên mạng chỉ có thể thấy địa chỉ IP mong muốn có thể thực hiện một cái gì đó tương tự. Chẳng hạn, giả sử tôi chỉ muốn localhost có sẵn cho một chương trình cụ thể.

Đầu tiên, tôi tạo không gian tên mạng:

ip netns add limitednet

Không gian tên có giao diện loopback theo mặc định, vì vậy tiếp theo tôi chỉ cần đưa nó lên:

sudo ip netns exec limitednet ip link set lo up

Bây giờ, tôi có thể chạy một chương trình bằng cách sử dụng ip netns exec limitednetvà nó sẽ chỉ có thể thấy giao diện loopback:

sudo ip netns exec limitednet ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

Nếu tôi muốn giới hạn nó ở một địa chỉ khác ngoài localhost, tôi có thể thêm các giao diện khác vào không gian tên bằng cách sử dụng:

ip link set DEVICE_NAME netns NAMESPACE

Tôi phải thử nghiệm thêm một chút để tìm ra cách thêm một địa chỉ IP vào một không gian tên trong trường hợp giao diện có thể có nhiều hơn một địa chỉ IP

Các bài viết LWN trên không gian tên cũng rất hữu ích.


Nhưng điều đáng nói là nó sẽ đòi hỏi nhiều sự chuẩn bị hơn vì không gian tên mạng có bảng định tuyến riêng, v.v. Nếu ai đó đến với cách bắt chước đơn giản hơn jail, tôi sẽ sử dụng nó. ;)
poige
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.