사용자 당 하나의 IP를 어떻게 할당 할 수 있습니까?


11

두 사람이 동시에 플레이 할 수 있도록 Steam 가정 스트리밍을 사용하는 헤드리스 Steam 게임 서버를 만들고 있습니다. 설정의 멀티 시트 부분은 수행되고 작동하지만 무선으로 작동시키는 것은 매우 번거로운 작업입니다.

한 번에 하나의 Steam 클라이언트 만 가정 내 스트리밍을 활성화 할 수 있습니다. 이것은 동일한 포트와 IP 주소를 사용하기 때문일 가능성이 높습니다. 각 사용자에게 고유 한 IP 주소를 할당하려면 어떻게해야합니까?

스트리밍은 홈 네트워크 내에서만 수행됩니다. 머신 자체에는 단일 인터페이스에 이미 3 개의 IP가 있습니다.

답변:


21

Linux 네트워크 네임 스페이스를 사용하여 프로세스에 다른 네트워크 구성을 할당 할 수 있습니다 . 이론적으로 각 사용자를 별도의 네트워크 네임 스페이스에 설정 하도록 PAM * 을 구성 할 수 있어야 하지만, 해당 네임 스페이스에서 해당 응용 프로그램을 시작하는 것이 더 간단합니다.

공통 설정은 네임 스페이스를 네트워크에 연결하기위한 Linux 브릿지 인터페이스 작성을 설명 할 수 있습니다. ipvlan (커널 버전 3.19 이상에 포함) 또는 macvlan 장치 (무선의 경우 macvlan을 사용할 수 없음)를 사용 하여 좀 더 간단한 설정을 보관할 수 있습니다 . Linux 커널 설명서에는 네트워크 네임 스페이스에서 ipvlan 을 설정 하는 자세한 예가 있습니다.

설명서의 예제를 따르면 :

  1. 네트워크 네임 스페이스 ns0 만들기

    ip netns add ns0
    
  2. eth0에 ipvlan 슬레이브 생성 (마스터 장치)

    ip link add link eth0 ipvl0 type ipvlan mode l2
    
  3. 네트워크 네임 스페이스 ns0에 슬레이브 할당

    ip link set dev ipvl0 netns ns0
    
  4. 네트워크 네임 스페이스 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
    

    호스트와의 라우터 주소 제공 $IPADDR등을 $ROUTER.

  5. 다음을 사용하여 네트워크 네임 스페이스에서 애플리케이션을 실행하십시오. ip exec

    ip netns exec ns0 <command>
    

    다른 사용자로 명령을 실행하려면 평소를 사용하십시오 su <user> -c -- <command>.


* 편집 : 이론에서 실습까지 : 사용자마다 네트워크 네임 스페이스를 변경하는 방법을 보여주기 위해 간단한 PAM 모듈을 작성했습니다. ip netns위와 같이 네트워크 이름을 구성하고 특정 사용자를 특정 네임 스페이스에 매핑해야합니다. 이후 모든 사용자 프로세스는 기본 네임 스페이스 대신 구성된 네임 스페이스에있게됩니다. 코드는 github에서 호스팅 됩니다 . 자신의 위험에 따라 사용하십시오.


두 번째 명령은 ubuntu 14.04나에게만 효과가 없습니다 Garbage instead of arguments "mode ...". Try "ip link help".
Sim

1
커널 버전으로 답변을 업데이트했지만 Ubuntu 14.04에는 최근 충분한 커널 버전이 포함되어 있지 않습니다. 무선을 사용할 때 별도의 IP 주소를 구성 할 수있는 해결 방법을 생각할 수 없습니다. 이더넷을 사용하는 경우 명령 3 에서 ipvlanmacvlan 으로 바꾸고 나머지 예를 따르십시오.
sebasth

당신은 명령 2에서 의미합니까? 변수 $IPADDR$ROUTER나에 의해 제공되어야하거나 이미 설정되어 있습니까?
Sim

1
실제로 명령 2 . 고유 한 네트워크 구성을 제공해야합니다.
sebasth

2
@Sim good catch, 그렇지 않았습니다. 대답을 수정하면 예제의 다른 부분과 같이 exec 키워드 뒤에 네임 스페이스를 지정해야합니다.
sebasth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.