Linux: esiste un modo pratico per eseguire un programma che lo lega all'indirizzo IP scelto?


11

In FreeBSD 4.9 è stato molto facile eseguire un solo comando come

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

se il percorso era /che avevi in ​​esecuzione lo stesso programma del solito, ma tutte le sue comunicazioni di rete erano limitate per utilizzare solo l'indirizzo IP fornito come origine. A volte è molto utile.

Ora in Linux c'è LXC, che sembra molto simile alle jailzone di FreeBSD (o Solaris) - puoi pensare a un modo simile per eseguire un programma?


Con quale programma stai cercando di farlo? Molti programmi sono abbastanza configurabili da poter dire a quale IP associarsi.
Warren Young,

@WarrenYoung, grazie KO, ma "many"! = "All"
poige

Un buon caso di "jailing" di un eseguibile per utilizzare un IP specifico è l'esecuzione di più server di gioco su un computer in una festa LAN. Ad esempio, i giochi Valve trasmettono solo sulle porte 27015-27020, quindi per IP puoi avere solo 6 server. Quindi aggiungi IP virtuali su una scheda NIC ma devi specificare "+ ip <indirizzo>" sulla riga di comando del server di gioco che interrompe la trasmissione della sua presenza ai client => nessun server visibile nel browser LAN. Quindi "+ ip" non funzionerà. Pertanto, è necessario eseguire il jailing di ciascun server in un ambiente in cui è possibile trovare solo 1 indirizzo IP. Risultato: nessun limite in #servers + i client vedono tutti i server.
Timmos,

Risposte:


12

L'avvio del processo all'interno di uno spazio dei nomi di rete in grado di visualizzare solo l'indirizzo IP desiderato può ottenere risultati simili. Ad esempio, suppongo che volessi localhost disponibile solo per un determinato programma.

Innanzitutto, creo lo spazio dei nomi di rete:

ip netns add limitednet

Gli spazi dei nomi hanno un'interfaccia di loopback per impostazione predefinita, quindi dopo devo solo mostrarlo:

sudo ip netns exec limitednet ip link set lo up

Ora posso eseguire un programma usando ip netns exec limitednete sarà in grado di vedere solo l'interfaccia di 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

Se volessi limitarlo a un indirizzo diverso da localhost, potrei aggiungere altre interfacce nello spazio dei nomi usando:

ip link set DEVICE_NAME netns NAMESPACE

Dovrei sperimentare un po 'di più per capire come aggiungere un singolo indirizzo IP in uno spazio dei nomi nel caso in cui un'interfaccia potrebbe avere più di un indirizzo IP

Anche l'articolo LWN sugli spazi dei nomi è utile.


Ma vale la pena ricordare che richiederebbe molte più preparazioni poiché lo spazio dei nomi di rete ha una propria tabella di routing e così via. Se qualcuno arriva con un modo più semplice di imitare jail, lo userò. ;)
poige,
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.