Ubuntu 20.04下Firejail网络隔离配置后无法访问内网/互联网的问题求助
Ubuntu 20.04下Firejail网络隔离配置后无法访问内网/互联网的问题求助
大家好,我目前在Ubuntu 20.04上使用Firejail做网络隔离时遇到了棘手的问题——不管是配置访问公司内网的沙箱,还是访问互联网的沙箱,都无法正常连接网络。下面是详细的情况和我试过的操作,麻烦各位帮忙分析一下原因,或者给点可行的解决思路~
我的机器有两张网卡:
eno1:以太网网卡,用于访问公司内网wlp0s20f3:Wi-Fi网卡,用于访问互联网
场景1:配置仅访问内网的沙箱
我执行了这条Firejail命令:
firejail --noprofile --nonewprivs --noroot --net=eno1 --hostname=intranet --name=intranet --debug --dns=AAA.BBB.CCC.DDD
(注:AAA.BBB.CCC.DDD是公司内网的DNS服务器地址)
现象:
- 沙箱启动后,既无法访问内网,也无法访问互联网
- 执行
ip a能看到沙箱创建了虚拟网卡eth0-10765@if2(这不是我物理机上的真实网卡),相关输出如下:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 (...) 2: eth0-10765@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 (...)
ip route show的输出:
default via AAA.BBB.CCC.XXX dev eth0-10765 AAA.BBB.CCC.0/24 dev eth0-10765 proto kernel scope link src AAA.BBB.CCC.ZZZ
(注:XXX和ZZZ是不同的地址)
- 沙箱启动日志的部分内容:
sbox run: /run/firejail/lib/fnet ifup eth0-10765 Set caps filter 3000 ARP-scan eth0-10765, AAA.BBB.CCC.39/24 IP address range from AAA.BBB.CCC.1 to AAA.BBB.CCC.255 Trying AAA.BBB.CCC.ZZZ ... Configuring AAA.BBB.CCC.ZZZ address on interface eth0-10765 sbox run: /run/firejail/lib/fnet config interface eth0-10765 2886891220 4294967040 1500 Set caps filter 3000 Announce AAA.BBB.CCC.ZZZ ... Network namespace enabled sbox run: /run/firejail/lib/fnet printif Set caps filter 3000 Interface MAC IP Mask Status lo 127.0.0.1 255.0.0.0 UP ::1 eth0-10765 XX:XX:XX:XX:XX:XX AAA.BBB.CCC.ZZZ 255.255.255.0 UP XX::XX:XX:XX:XX Default gateway AAA.BBB.CCC.XXX DNS server QQQ.RRR.SSS.TTT Drop privileges: pid 6, uid 1000, gid 1000, force_nogroups 0 Supplementary groups: 24 Mounting /proc filesystem representing the PID namespace Basic read-only filesystem: Mounting read-only /etc 1096 1048 259:6 /etc /etc ro,relatime master:1 - ext4 /dev/nvme0n1p6 rw,errors=remount-ro
- 沙箱里没有ping命令,但打开浏览器后,既无法加载内网页面,也没有代理认证提示,完全无法连接网络。
场景2:配置仅访问互联网的沙箱
我尝试用Wi-Fi网卡创建沙箱,命令如下:
firejail --noprofile --nonewprivs --noroot --net=wlp0s20f3 --hostname=internet --name=internet --debug --dns=8.8.8.8 --caps.drop=all --dbus-system=none
现象:
- 同样无法访问互联网,浏览器完全加载不出任何页面。
场景3:尝试直接将物理网卡移入沙箱
我还试过用--interface参数把物理网卡eno1直接移入沙箱,命令:
firejail --noprofile --interface=eno1 --hostname=intranet --ipc-namespace --name=intranet --debug
现象:
- 物理机上确实看不到eno1网卡了,沙箱里能看到,但网卡状态是
DOWN,而且没有默认网关,依然无法访问内网或互联网。 - 沙箱启动日志的部分内容:
sbox run: /run/firejail/lib/fnet ifup lo Set caps filter 3000 Configuring AAA.BBB.CCC.39 address on interface eno1 sbox run: /run/firejail/lib/fnet config interface eno1 2886891047 4294967040 1500 Set caps filter 3000 Network namespace enabled sbox run: /run/firejail/lib/fnet printif Set caps filter 3000 Interface MAC IP Mask Status lo 127.0.0.1 255.0.0.0 UP ::1 eno1 XX:XX:XX:XX:XX:XX AAA.BBB.CCC.39 255.255.255.0 DOWN Drop privileges: pid 5, uid 1000, gid 1000, force_nogroups 0 Mounting /proc filesystem representing the PID namespace Basic read-only filesystem: Mounting read-only /etc 1097 1048 259:6 /etc /etc ro,relatime master:1 - ext4 /dev/nvme0n1p6 rw,errors=remount-ro
额外异常:systemd-resolve无法读取网卡信息
在沙箱里执行systemd-resolve时出现错误:
$ sudo systemd-resolve --status --no-pager Global LLMNR setting: no MulticastDNS setting: no DNSOverTLS setting: no DNSSEC setting: no DNSSEC supported: no DNSSEC NTA: 10.in-addr.arpa 16.172.in-addr.arpa 168.192.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa corp d.f.ip6.arpa home internal intranet lan local private test Failed to get link data for 2: Unknown object '/org/freedesktop/resolve1/link/_32'.
我的猜想与需求
我怀疑这可能是Ubuntu对网络命名空间、网卡的处理方式,和Firejail的适配出了问题。我也考虑过换其他发行版,但如果能在当前环境解决最好。另外我对网络命名空间完全是新手,非常好奇怎么实现我的需求——用沙箱分别隔离访问内网和互联网的环境,不管用不用Firejail都可以,希望各位能给点指导。
系统与软件版本
- 系统版本:
$ uname -a Linux Ubuntu 5.15.0-69-generic #76~20.04.1-Ubuntu SMP Mon Mar 20 15:54:19 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
- Firejail版本:
$ firejail --version firejail version 0.9.73 Compile time support: always force nonewprivs support is disabled AppArmor support is disabled AppImage support is enabled chroot support is enabled D-BUS proxy support is enabled file transfer support is enabled firetunnel support is disabled IDS support is disabled networking support is enabled output logging is enabled overlayfs support is disabled private-home support is enabled private-lib support is disabled private-cache and tmpfs as user enabled SELinux support is enabled user namespace support is enabled X11 sandboxing support is enabled
备注:内容来源于stack exchange,提问作者theRael
相关产品推荐
相关产品推荐

