Ho un programma che vorrei testare in modalità offline senza rimuovere la mia rete attuale. Questo programma dovrebbe comunque connettersi a socket locali, inclusi socket di dominio unix e loopback. Deve anche ascoltare in loopback ed essere visibile ad altre app.
Ma i tentativi di connessione a una macchina remota dovrebbero fallire.
Mi piacerebbe avere un'utilità che funzioni come strace
/ unshare
/ sudo
e semplicemente esegua un comando con Internet (e LAN) nascosto e tutto il resto ancora funzionante:
$ offline my-program-to-test
Questa domanda ha suggerimenti alla risposta: bloccare l'accesso alla rete di un processo?
Ci sono un paio di suggerimenti lì, come eseguire come un altro utente quindi manipolare iptables o unshare -n
. Ma in entrambi i casi non conosco l'incantesimo per ottenere socket di dominio unix e loopback da condividere con il sistema principale - le risposte a questa domanda mi dicono solo come annullare la condivisione dell'intera rete.
Il programma che sto testando deve ancora connettersi al mio server X e dbus e persino essere in grado di ascoltare in loopback le connessioni da altre app sul sistema.
Idealmente, vorrei evitare di creare chroot o utenti o macchine virtuali o simili, poiché diventa altrettanto fastidioso quanto scollegare il cavo di rete. cioè il punto della domanda è come posso renderlo semplice come a sudo
.
Mi piacerebbe che il processo funzionasse al 100% normalmente, tranne per il fatto che le chiamate di rete che specificano un indirizzo non locale fallirebbero. Idealmente mantenendo lo stesso uid, lo stesso homedir, lo stesso pwd, lo stesso tutto tranne ... offline.
Sto usando Fedora 18, quindi le risposte Linux non portabili vanno bene (previste, anche).
Sono anche felice di risolverlo scrivendo un programma in C, se questo è ciò che è coinvolto, quindi le risposte che implicano la scrittura in C vanno bene. Semplicemente non so quali syscalls quel programma C dovrebbe fare per revocare l'accesso alla rete esterna mantenendo la rete locale.
Qualsiasi sviluppatore che cerca di supportare la "modalità offline" apprezzerebbe probabilmente questa utility!