当我在 google vm 中使用 ifconfig ens4 down 和 ifconfig ens4 up 时,连接没有返回,并且保持断开状态
sudo -s
apt install screen
screen -s test sh start.sh
ctrl + a + d
echo "1"
ifconfig ens4 up
sleep 5
echo "2"
ifconfig ens4 down
sleep 5
echo "3"
sleep 5
ifconfig ens4 up
echo "4"
ifconfig ens4 down 后停止,不要执行 ifconfig ens4 up
所以我重新启动谷歌云控制台面板以恢复正常
我需要关闭它然后再打开以使机器处于桥接模式,但是当 ens4 关闭时它就会停止工作,即使使用 screen -s test sh start.sh;
我也尝试
ip link set dev ens4 up
答案1
当接口关闭时,与此接口上的 IP 地址相关联的任何手动路由都将被删除。当接口启动时,这些手动路由(肯定包括默认路线仍丢失。
为了现代性,我将使用ifconfig ens4 down
完整语法ip link set dev ens4 down
替换任何出现的ifconfig ens4 up
ip link set dev ens4 up
假设ens4应分配 192.0.2.2/24,并使用 192.0.2.1 作为网关的默认路由。
当前问题
添加地址:
ip address add 192.0.2.2/24 dev ens4
管理上启动接口:
ip link set dev ens4 up
noprefixroute
如果地址中没有选项,则proto kernel
在管理启动接口时会自动(=>)添加此路由:
192.0.2.0/24 dev ens4 proto kernel scope link
(如果命令是,ip address add dev 192.0.2.2/24 dev ens4 noprefixroute
那么配置也必须手动添加路线,例如ip route add 192.0.2.0/24 dev ens4
。)
添加默认路由:
ip route add default via 192.0.2.1 dev ens4
再次打开接口根本没有效果。现在,一旦关闭接口,任何需要其地址的路由都会消失(连锁效应):192.0.2.0/24,因此默认路由,因为它依赖于到 192.0.2.1 的路由。
一旦接口再次启动,只有自动(原始内核)作用域链接路由恢复,而不是手动添加的默认路由:连接仍然丢失。只需再次添加此默认路由:
ip link set dev ens4 up
ip route add default via 192.0.2.1 dev ens4
关于桥接
假设有一座桥叫做bridge0
。
ip link add name bridge0 type bridge
ip link set dev bridge0 up
当接口成为桥接端口时,会出现类似的情况:
ip link set dev ens4 master bridge0
此接口的路由停止:在此接口上接收的数据包被转发到网桥,而不再转发到 IPv4 路由层(详细信息请参见此处博客,查看项目 5)。但同时,如果没有删除,接口上仍会保留一条已定义的路由,这可能会使网络堆栈对传出的数据包、严格反向路径转发等产生混淆。
因此最好在之前删除所有地址(=> 也自动删除路由),例如:
ip address flush dev ens4
并将其添加到网桥中,以及默认路由:
ip address add 192.0.2.2/24 dev bridge0
ip route add default via 192.0.2.1 dev bridge0
所有这些步骤都会中断网络几秒钟,因此应该自动执行,通过控制台访问,甚至在屏幕层。