Làm thế nào bạn có thể chỉ định một IP cho mỗi người dùng?


11

Tôi đang xây dựng một máy chủ trò chơi Steam không đầu, sử dụng phát trực tuyến Steam trong nhà để cho hai người chơi cùng một lúc. Phần nhiều phần của thiết lập được thực hiện và hoạt động, nhưng để nó hoạt động không dây thì khá rắc rối.

Mỗi lần chỉ có một khách hàng Steam có thể kích hoạt phát trực tuyến tại nhà. Điều này rất có thể là do sử dụng cùng một cổng và địa chỉ IP. Làm cách nào tôi có thể chỉ định mỗi người dùng địa chỉ IP của riêng họ?

Truyền phát sẽ chỉ được thực hiện từ trong mạng gia đình. Bản thân máy đã có 3 IP trên một giao diện duy nhất.

Câu trả lời:


21

Bạn có thể gán cấu hình mạng khác nhau cho một quá trình sử dụng không gian tên mạng linux . Về lý thuyết, có thể định cấu hình PAM * để đặt từng người dùng trong không gian tên mạng riêng của mình, nhưng có thể đơn giản hơn để khởi chạy ứng dụng được đề cập trong không gian tên của chính nó.

Một thiết lập chung có thể mô tả việc tạo giao diện cầu Linux để kết nối các không gian tên với mạng. Thiết lập đơn giản hơn một chút có thể được lưu trữ bằng ipvlan (có trong phiên bản kernel 3.19 trở lên) hoặc thiết bị macvlan (đối với không dây, bạn không thể sử dụng macvlan ). Tài liệu nhân Linux có một ví dụ chi tiết để thiết lập ipvlan trong không gian tên mạng.

Theo ví dụ trong tài liệu:

  1. Tạo một không gian tên mạng ns0

    ip netns add ns0
    
  2. Tạo nô lệ ipvlan trên eth0 (thiết bị chính)

    ip link add link eth0 ipvl0 type ipvlan mode l2
    
  3. Gán nô lệ cho không gian tên mạng ns0

    ip link set dev ipvl0 netns ns0
    
  4. Cấu hình thiết bị nô lệ trong không gian tên mạng ns0

    ip netns exec ns0 ip link set dev ipvl0 up
    ip netns exec ns0 ip link set dev lo up
    ip netns exec ns0 ip -4 addr add 127.0.0.1 dev lo
    ip netns exec ns0 ip -4 addr add $IPADDR dev ipvl0
    ip netns exec ns0 ip -4 route add default via $ROUTER dev ipvl0
    

    Cung cấp địa chỉ máy chủ và bộ định tuyến trong $IPADDR$ROUTER.

  5. Chạy ứng dụng của bạn trong không gian tên mạng bằng cách sử dụng ip exec

    ip netns exec ns0 <command>
    

    Để chạy lệnh như người dùng khác, sử dụng thông thường su <user> -c -- <command>.


* EDIT: Từ lý thuyết đến thực tiễn: Tôi đã viết một mô-đun PAM đơn giản để trình bày cách thay đổi không gian tên mạng cho mỗi người dùng. Bạn cần định cấu hình một tên nơi mạng ip netnsnhư ở trên và ánh xạ người dùng cụ thể đến một không gian tên cụ thể. Sau đó, tất cả các quy trình người dùng sẽ ở trong không gian tên được cấu hình của họ thay vì mặc định. Mã được lưu trữ trên github . Sử dụng lúc nguy hiểm của riêng bạn.


Lệnh thứ hai của bạn không hoạt động đối với tôi. ubuntu 14.04Tôi chỉ nhận được : Garbage instead of arguments "mode ...". Try "ip link help".
Sim

1
Tôi đã cập nhật câu trả lời với phiên bản kernel, Ubuntu 14.04 dường như không bao gồm phiên bản kernel đủ gần đây. Tôi không thể nghĩ ra cách giải quyết cho phép bạn định cấu hình các địa chỉ IP riêng biệt khi bạn đang sử dụng không dây. Nếu bạn đang sử dụng Ethernet, bạn chỉ có thể thay thế ipvlan bằng macvlan trong lệnh 3 và làm theo phần còn lại của ví dụ.
sebasth

ý bạn là trong lệnh 2? Các biến $IPADDR$ROUTERphải được cung cấp bởi tôi hoặc đã được đặt?
Sim

1
Thật vậy, lệnh 2 . Bạn phải cung cấp cấu hình mạng của riêng bạn.
sebasth

2
@Sim bắt tốt, nó đã không. Sửa câu trả lời, không gian tên cần được chỉ định sau từ khóa exec như trong các phần khác của ví dụ.
sebasth
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.