[解決済み] - 下記のアップデートをご覧ください。
アウトラインサーバーをインストールしました(協会)私のサーバーでは、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
ファイアウォールDルール:
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
この質問への回答協会役に立ちません。
たとえば、アウトライン管理者はうまく機能します。鍵を生成すると正常に接続されますが、概要クライアント私には、次のエラーが発生します。
ネットワークエラーが発生しました。このようなことが再び発生した場合は、コメントを提出してください。
次のように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を設定する方法は?
ありがとうございます。
アウトラインはDockerを使用します。
アップデート [2018.05.16]:
問題は、アウトラインが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さん、ありがとうございます。助けてくれてありがとう。
答え1
新しいubuntu 18.04サーバーにdockerをインストールし、dockerの実行時にファイアウォールがどのように機能するかを簡単な方法で確認しました。
画像は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出力の「PORTS」とss -tlp出力のdocker-proxyを参照してください。
問題が解決することを願っています。
ありがとう
答え2
ファイアウォールにhttpまたはhttpsポートを追加するにはどうですか?
firewall-cmd --add-service=https --permanent
私の意見では、jasonはWebアプリケーションなので、クライアントはhttpまたはhttpsプロトコルを介してサーバーに接続します。