私はubuntuベースのDockerコンテナ内でopenconnectを呼び出しています。サーバーに正常に接続し、パスワードの入力を求めますが、その後
Got CONNECT response: HTTP/1.1 200 OK
CSTP connected. DPD 30, Keepalive 20
TUNSETIFF failed: Operation not permitted
TUNSETIFF Wordを検索すると、すべての答えはSudoで実行されていないコマンドに関するものですが、私はすでにコンテナー内でrootになっています。他に何がうまくいかない可能性がありますか?
デフォルトでは、Dockerコンテナーは、Linux機能のセットを減らして起動されます(man capabilities
を参照)。削減されたセットには、一部のネットワーク関連機能が含まれていません(おそらく、コンテナーがホストまたは他のコンテナーからのトラフィックをスニッフィングできないようにするため)。
完全なネットワーク機能を備えたコンテナを起動するには、SYS_NET_ADMIN
引数を使用して--cap-add
機能を明示的に追加します。例:
docker run -d --cap-add SYS_NET_ADMIN myimage
または、コンテナに--privileged
を使用して特権の完全なセットを付与します。例:
docker run -d --privileged myimage
を介して特権コンテナを実行する
docker run -d --privileged myimage
エイドリアンが指摘したように、NET_ADMIN
機能を追加して実行し、トンネルデバイスを渡します。例:
docker run -d --cap-add NET_ADMIN --device /dev/net/tun myimage
--privilegedでコンテナを開始します。 (答えてくれたエイドリアン・ムアットに感謝します)。