La suppression de la route par défaut devrait le faire. Vous pouvez afficher la table de routage avec /sbin/route
, et supprimez la valeur par défaut avec :
sudo /sbin/route del default
Cela laissera votre système connecté au réseau local, mais sans savoir où envoyer les paquets destinés à l'au-delà. Cela simule probablement très précisément la situation "pas d'accès externe".
Vous pouvez le remettre avec route add
(en vous souvenant de ce que votre passerelle est censée être), ou simplement en redémarrant le réseau. Je viens d'essayer sur un système avec NetworkManager, et le zapping par défaut a bien fonctionné, et je pouvais le restaurer simplement en cliquant sur l'icône du panneau et en re-choisissant le réseau local. Il est possible que NM le fasse par lui-même lors d'autres événements, alors méfiez-vous de cela.
Une autre approche serait d'utiliser un iptables
règle pour bloquer le trafic sortant. Mais je pense que l'approche de routage est probablement meilleure.
Vous avez écrit
Alors, comment simuler "pas d'accès externe" dans ma machine de développement ?
Comment "désactiver" mon interface Ethernet et la réactiver plus tard sans tracas ?
S'agit-il de deux questions ou d'une seule question ? Je ne sais pas ce que vous entendez par simulate "no external access"
. Cependant, pour désactiver l'interface Ethernet, vous pouvez simplement faire
#ifdown eth0
#ifup eth0
ou quel que soit votre appareil Internet. Cela amènera votre interface Ethernet vers le bas et vers le haut, respectivement.
Vous pouvez exécuter votre code dans une machine virtuelle (User Mode Linux, VServer, OpenVZ, VirtualBox, VMWare, KVM, …) que vous fournissez uniquement avec une interface réseau hôte uniquement (c'est-à-dire aucun routage de la VM vers n'importe où sauf la machine hôte ).
Si vous exécutez l'application en tant qu'utilisateur dédié appuser
, vous pouvez restreindre l'accès au réseau de cet utilisateur. Assurez-vous d'avoir iptables
(Ubuntu :iptables Installer iptables http://bit.ly/software-small) et iproute2 (ip
commande) (Ubuntu :iproute Install iproute http://bit.ly/software-small, iproute-doc Install iproute-doc http://bit.ly/software-small) installé. Ensuite, vous pouvez utiliser iptables
pour marquer le trafic sortant des processus exécutés en tant que appuser
, et ip rule
et ip route
pour configurer une autre table de routage pour cet utilisateur.
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
(Remarque :non testé. Voir également d'autres exemples de manipulation de paquets IP Linux.)