FirewallD 丟棄 Docker 數據包
$$ SOLVED $$- 請參閱下面的更新。 我在我的伺服器上安裝了大綱伺服器(連結),不幸的是 FirewallD 丟棄了所有來自大綱客戶端的數據包。
我的系統:
Ubuntu 18.04 x64 Linux x 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
防火牆D版本:
0.4.4.5
碼頭工人版本:
Docker version18.05.0-ce, build f150324
防火牆規則:
root@x:~# firewall-cmd --get-active-zones public interfaces: ens3 docker0 root@x:~# firewall-cmd --list-ports {outline_server_port}/tcp {outline_server_port}/udp
此連結上的答案也無濟於事。
Outline-Manager 工作正常,例如:我可以創建密鑰並成功連接,但Outline 客戶端給我以下錯誤:
發生網路錯誤。如果再次發生這種情況,請送出回饋。
一旦我使用以下命令停止 FirewallD:
systemctl stop firewalld.service
大綱客戶端工作正常,當我啟動 FirewallD 時,它不再工作。
以下來自FirewallD狀態
root@x:~# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2018-05-15 23:37:31 CEST; 8s ago Docs: man:firewalld(1) Main PID: 2479 (firewalld) Tasks: 2 (limit: 1113) CGroup: /system.slice/firewalld.service └─2479 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid May 15 23:37:31 x systemd[1]: Starting firewalld - dynamic firewall daemon... May 15 23:37:31 x systemd[1]: Started firewalld - dynamic firewall daemon. May 15 23:37:32 x firewalld[2479]: WARNING: COMMAND_FAILED: '/sbin/iptables -w2 -t filter -n -L DOCKER-USER' failed: iptables: No chain/target/match by that name. May 15 23:37:32 x firewalld[2479]: WARNING: COMMAND_FAILED: '/sbin/iptables -w2 -t filter -C DOCKER-USER -j RETURN' failed: iptables: Bad rule (does a matching rule exist in that chain?). May 15 23:37:32 x firewalld[2479]: WARNING: COMMAND_FAILED: '/sbin/iptables -w2 -t filter -C FORWARD -j DOCKER-USER' failed: iptables: No chain/target/match by that name.
我已啟用
- 也偽裝在 FirewallD (
firewall-cmd --add-masquerade
)- 並且還啟用了 ipv4 數據包轉發 (
vim /etc/sysctl.conf
&net.ipv4.ip_forward=1
)現在我的問題是:如何配置 FirewallD 以允許大綱客戶端數據包?
非常感謝。
大綱使用泊塢窗。
更新
$$ 2018.05.16 $$: 問題存在於 outline 在 docker 容器中為每個新的密鑰 AKA 客戶端創建的唯一埠,因此要解決此問題,請執行以下操作:
執行以下命令(非常感謝@abe)
ss -tlp
現在,將顯示所有帶有相關埠的 ss 伺服器,例如我的如下所示:
root@dockerTest:~# ss -tlp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:12615 0.0.0.0:* users:(("ss-server",pid=1162,fd=5)) LISTEN 0 128 127.0.0.53%lo:domain 0.0.0.0:* users:(("systemd-resolve",pid=617,fd=13)) LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* users:(("sshd",pid=824,fd=3)) LISTEN 0 128 [::]:ssh [::]:* users:(("sshd",pid=824,fd=4)) LISTEN 0 128 *:47515 *:* users:(("node",pid=1103,fd=12))
現在,從輸出中我們可以看到,ss-server 使用埠“12615”,我們應該在 FirewallD 中允許該埠。為此,請執行以下命令:
firewall-cmd --add-port=12615/tcp firewall-cmd --add-port=12615/udp
檢查大綱客戶端,它應該連接。
如果一切正常,請執行以下命令,使更改永久生效
firewall-cmd --add-port=12615/tcp --permanent firewall-cmd --add-port=12615/udp --permanent
非常感謝@abe,非常感謝您的幫助。
我在一個新的 ubuntu 18.04 伺服器上安裝了 docker,並在以簡單的方式執行 docker 時驗證了 firewalld 是如何工作的。
該圖像是我使用的httpd。
# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04 LTS Release: 18.04 Codename: bionic # uname -a Linux my_hostname 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux $ sudo docker image list REPOSITORY TAG IMAGE ID CREATED SIZE httpd latest fb2f3851a971 2 weeks ago 178MB $ sudo docker run -d -i -t -p 80:80 httpd $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 43b398cfa5b9 httpd httpd-foreground" 31 minutes ago Up 31 minutes 0.0.0.0:80->80/tcp loving_northcutt # ss -tlp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:http *:* users:(("docker-proxy",pid=2101,fd=4)) # firewall-cmd --list-all public target: default interfaces: sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
我真的很抱歉我的錯誤建議。我可以從我的電腦連接該 httpd 而無需進行任何更改。
請參閱 sudo docker ps -a 輸出的“埠”和 ss -tlp 輸出的 docker-proxy。
我想我希望它能解決問題。
謝謝