L'eliminazione del percorso predefinito dovrebbe fare questo. Puoi mostrare la tabella di routing con /sbin/route
ed elimina il valore predefinito con:
sudo /sbin/route del default
Ciò lascerà il tuo sistema connesso alla rete locale, ma senza idea di dove inviare i pacchetti destinati oltre. Questo probabilmente simula molto accuratamente la situazione di "nessun accesso esterno".
Puoi rimetterlo con route add
(ricordando quale dovrebbe essere il tuo gateway) o semplicemente riavviando la rete. Ho appena provato su un sistema con NetworkManager e lo zapping dell'impostazione predefinita ha funzionato correttamente e ho potuto ripristinarlo semplicemente facendo clic sull'icona del pannello e scegliendo nuovamente la rete locale. È possibile che NM possa farlo da solo in altri eventi, quindi fai attenzione.
Un altro approccio sarebbe usare un iptables
regola per bloccare il traffico in uscita. Ma penso che l'approccio di routing sia probabilmente migliore.
Hai scritto
Quindi, come faccio a simulare "nessun accesso esterno" nella mia macchina di sviluppo?
Come faccio a "disattivare" la mia interfaccia ethernet e riattivarla in seguito senza problemi?
Sono queste due domande o una domanda? Non sono sicuro di cosa intendi per simulate "no external access"
. Tuttavia, per disattivare l'interfaccia ethernet potresti semplicemente fare
#ifdown eth0
#ifup eth0
o qualunque sia il tuo dispositivo Internet. Questo porterà la tua interfaccia ethernet rispettivamente verso il basso e verso l'alto.
Puoi eseguire il tuo codice in una macchina virtuale (User Mode Linux, VServer, OpenVZ, VirtualBox, VMWare, KVM, ...) che fornisci solo con un'interfaccia di rete solo host (ovvero nessun routing dalla VM a qualsiasi altra parte tranne la macchina host ).
Se esegui l'applicazione come utente dedicato appuser
, puoi limitare l'accesso alla rete di quell'utente. Assicurati di avere iptables
(Ubuntu:iptables Installa iptables http://bit.ly/software-small) e iproute2 (ip
comando) (Ubuntu:iproute Installa iproute http://bit.ly/software-small, iproute-doc Installa iproute-doc http://bit.ly/software-small) installato. Quindi puoi usare iptables
per contrassegnare il traffico in uscita dai processi in esecuzione come appuser
e ip rule
e ip route
per impostare una tabella di routing alternativa per quell'utente.
ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
iptables -t mangle -A OUTPUT -m owner --uid-owner appuser -j MARK --set-mark 1
(Nota:non testato. Vedi anche altri esempi di manipolazione di pacchetti IP di Linux.)