Come si può assegnare un indirizzo IP per utente?


11

Sto costruendo un server di giochi Steam senza testa che utilizza lo streaming di Steam in-home per far giocare due persone contemporaneamente. La parte multiseat dell'installazione è fatta e funzionale, ma farlo funzionare in modalità wireless è piuttosto problematico.

Solo un client Steam può abilitare lo streaming in casa alla volta. Ciò è probabilmente dovuto all'utilizzo delle stesse porte e dello stesso indirizzo IP. Come posso assegnare a ciascun utente il proprio indirizzo IP?

Lo streaming avverrà solo all'interno della rete domestica. La macchina stessa ha già 3 IP su una singola interfaccia.

Risposte:


21

È possibile assegnare diverse configurazioni di rete a un processo utilizzando spazi dei nomi di rete linux . In teoria dovrebbe essere possibile configurare PAM * per impostare ciascun utente nel proprio spazio dei nomi di rete separato, ma è probabilmente più semplice avviare l'applicazione in questione nel proprio spazio dei nomi.

Un'installazione comune potrebbe descrivere la creazione di un'interfaccia bridge Linux per connettere gli spazi dei nomi alla rete. Una configurazione un po 'più semplice può essere archiviata usando ipvlan (incluso nelle versioni del kernel 3.19 e successive) o un dispositivo macvlan (per il wireless non è possibile usare macvlan ). La documentazione del kernel Linux ha un esempio dettagliato per l'impostazione di ipvlan nello spazio dei nomi di rete.

Seguendo l'esempio nella documentazione:

  1. Creare uno spazio dei nomi di rete ns0

    ip netns add ns0
    
  2. Crea slave ipvlan su eth0 (dispositivo master)

    ip link add link eth0 ipvl0 type ipvlan mode l2
    
  3. Assegnare gli slave allo spazio dei nomi di rete ns0

    ip link set dev ipvl0 netns ns0
    
  4. Configurare il dispositivo slave nello spazio dei nomi di rete 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
    

    Fornire gli indirizzi host e router in $IPADDRe $ROUTER.

  5. Eseguire l'applicazione nello spazio dei nomi di rete utilizzando ip exec

    ip netns exec ns0 <command>
    

    Per eseguire il comando come utente diverso, utilizzare il solito su <user> -c -- <command>.


* EDIT: dalla teoria alla pratica: ho scritto un semplice modulo PAM per dimostrare come modificare lo spazio dei nomi di rete per utente. È necessario configurare uno spazio dei nomi di rete ip netnscome sopra e mappare utenti specifici a spazi di nomi specifici. Successivamente tutti i processi utente saranno nel loro spazio dei nomi configurato anziché quello predefinito. Il codice è ospitato su github . Utilizzare a proprio rischio e pericolo.


il secondo comando non funziona per me su ubuntu 14.04io ho soltanto: Garbage instead of arguments "mode ...". Try "ip link help".
Sim

1
Ho aggiornato la risposta con la versione del kernel, Ubuntu 14.04 non sembra includere una versione del kernel abbastanza recente. Non riesco a pensare a una soluzione alternativa che ti consenta di configurare indirizzi IP separati quando si utilizza la rete wireless. Se stai usando Ethernet, puoi semplicemente sostituire ipvlan con macvlan nel comando 3 e seguire il resto dell'esempio.
sebasth,

intendi nel comando 2? Le variabili $IPADDRe $ROUTERdevono essere fornite da me o sono già impostate?
Sim

1
Effettivamente comando 2 . Devi fornire la tua configurazione di rete.
sebasth,

2
@Sim buona cattura, non l'ha fatto. Corretta la risposta, lo spazio dei nomi deve essere specificato dopo la parola chiave exec come in altre parti dell'esempio.
sebasth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.