トンネリングXdmcp+sshが機能しないのはなぜですか?

トンネリングXdmcp+sshが機能しないのはなぜですか?

SSH経由でXdmcpプロトコルのトンネルを設定したいと思います。リモートログインのためのアクセスセキュリティ。簡単な解決策はopenvpnかもしれませんが、まずsocat + sshを試してみたいです。サーバーはSolaris 10で、クライアントはSlackware 15です。

クライアントから

ssh -L 6667:localhost:6667 192.168.201.200

サーバー上

socat tcp4-listen:6667,reuseaddr,fork UDP:192.168.201.200:177

クライアントから

sudo socat udp4-listen:177,reuseaddr,fork tcp:localhost:6667

今クライアントでXepyrを実行しています...

Xephyr -query localhost -screen 1024x767  :2

ここに画像の説明を入力してください。

Xdcmpを直接使用してください。トンネルは必要ありませんが、安全ではありません。

答え1

Xephyrにクエリをlocalhostに送信するように指示したので、XDMCPパケットに表示されるネットワークアドレスを127.0.0.1として指定できます。 socat->ssh->socatパイプラインはパケットの内容を変更できません。

(UDPからTCPへ、そしてUDPへのプロトコル変換が有害な副作用を引き起こすかどうかはわかりませんが、そうなると仮定します。)

したがって、Solarisのディスプレイマネージャは「こんにちは。私は127.0.0.1:2のX11ディスプレイです。私を管理しますか?」というメッセージを受け取ります。XDMCP サポートが Solaris 側で有効になっていると仮定、XDMCPネゴシエーションが成功すると、ディスプレイマネージャはクラシックX11接続を確立し、127.0.0.1のTCPポート6002(ディスプレイ番号に基づいて)にグラフィカルログインウィンドウを表示します。Solaris ホストで。これは明らかにSlackwareホストにはまったく到達しません。

(実際には、Solaris 10システムが「XDMCPアクセスを許可しない」にデフォルト設定されていることを願っていますが、必要な構成がすでに完了していると仮定しています。)

Solarisホストのポート6002からSlackwareホストのローカルポート6002へのSSHリモートTCP転送も設定すると、次の利点が得られます。

 ssh -L 6667:localhost:6667 -R 6002:localhost:6002 192.168.201.200

ただし、Xepyrは最新のX11サーバーであるため、デフォルトでは着信TCP接続を受信できない可能性があります。着信TCP接続を受信するように明示的に指示する必要があるかもしれません。

Xephyr -listen tcp -query localhost -screen 1024x767 :2

この変更により、Solaris 側が XDMCP を許可するように正しく設定されていると仮定すると、この機能を実装する機会がある可能性があります。おそらく。それでも息を止めません。

1つの考えられる問題は、XDMCPプロトコルが表示名を中継している場合、:2Solaris側の表示マネージャが/tmp/.X11-unix/X2Unixソケットを使用してクエリ表示サーバーに接続できると想定できることです。 Solarisホストが十分に近代的であればsshdそれを渡すことができます...しかし、Unixソケットを使用すると、すべてのX11アプリケーション(ディスプレイマネージャを含む)がディスプレイが実際にローカルであると仮定し、X11プロトコルを有効にしようとします。拡張は共有に依存します。 X11サーバーへのメモリアクセス。アプリケーションとサーバーが異なるシステム上にあるため、共有メモリアクセスは当然不可能です。

これにより、Xephyr X11サーバーはSolaris Motifウィンドウマネージャに必要なすべてのX11フォントを使用できます。

答え2

実際にこの回避策を見つけました。

ssh -X -C 192.168.201.200 -t /usr/X11/bin/amd64/Xephyr :1 -query localhost

関連情報