Eliminar la ruta predeterminada debería hacer esto. Puede mostrar la tabla de enrutamiento con /sbin/route
y elimine el valor predeterminado con:
sudo /sbin/route del default
Eso dejará su sistema conectado a la red local, pero sin idea de dónde enviar los paquetes destinados al más allá. Esto probablemente simula la situación de "sin acceso externo" con mucha precisión.
Puedes devolverlo con route add
(recordando cuál se supone que es su puerta de enlace), o simplemente reiniciando la red. Acabo de probar en un sistema con NetworkManager, y zapping el valor predeterminado funcionó bien, y pude restaurarlo simplemente haciendo clic en el ícono del panel y volviendo a elegir la red local. Es posible que NM pueda hacer esto por sí mismo en otros eventos, así que ten cuidado con eso.
Otro enfoque sería usar un iptables
regla para bloquear el tráfico saliente. Pero creo que el enfoque de enrutamiento es probablemente mejor.
tu escribiste
Entonces, ¿cómo simulo "sin acceso externo" en mi máquina de desarrollo?
¿Cómo "desactivo" mi interfaz ethernet y la vuelvo a activar más tarde sin problemas?
¿Son estas dos preguntas o una sola pregunta? No estoy seguro de lo que quieres decir con simulate "no external access"
. Sin embargo, para desactivar la interfaz de ethernet, simplemente puede hacer
#ifdown eth0
#ifup eth0
o cualquiera que sea tu dispositivo de internet. Esto bajará y subirá la interfaz de ethernet, respectivamente.
Puede ejecutar su código en una máquina virtual (User Mode Linux, VServer, OpenVZ, VirtualBox, VMWare, KVM, …) que proporciona solo con una interfaz de red solo de host (es decir, sin enrutamiento desde la VM a ningún otro lugar que no sea la máquina host) ).
Si ejecuta la aplicación como usuario dedicado appuser
, puede restringir el acceso a la red de ese usuario. Asegúrate de tener iptables
(Ubuntu:iptables Instale iptables http://bit.ly/software-small) e iproute2 (ip
comando) (Ubuntu:iproute Instalar iproute http://bit.ly/software-small, iproute-doc Instalar iproute-doc http://bit.ly/software-small) instalado. Entonces puedes usar iptables
para marcar el tráfico saliente de los procesos que se ejecutan como appuser
y ip rule
y ip route
para configurar una tabla de enrutamiento alternativa para ese usuario.
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:no probado. Consulte también más ejemplos de manipulación de paquetes IP de Linux).