双方向ストリームを介した複数のHTTP接続トンネリング

双方向ストリームを介した複数のHTTP接続トンネリング

ネットワークではなく単一の双方向ストリーム(具体的にはQEMU virtioシリアルストリームですが重要ではありません)を介してhttpサーバー(Linux)を配信したいと思います。基本的に私が望むものは次のとおりです。

[XXX listen @ 8080] <-> some bidirectional stream <-> [YYY listen on stream, forward to http] <-> [web server:80] 

アイデアは、通常のWebブラウザ(Linux)を8080でリッスンしているXXXとして指定し、すべてがリモートWebサーバーとYYYの双方向にストリーミングされることです。ホストシステムからルートアクセスを要求できません。

私はXXXとYYYプログラムがsocat(または他の標準トンネリング関連プログラム)であると思いましたが、それは私を避けました。最も簡単な方法のアイデアはありますか?

ベストアンサー1

シリアルリンクを介してIPパケットを送信したいです。いいね!幸いなことに、この問題はIPパケットと同じくらい古く、「最も良い」解決策があります。

  • スリップ自動構成が不足しても問題ない場合(また:本物昔ながら。おそらくこれを使用したくないでしょう。 )
  • 購買力の評価両端にIPアドレスを割り当てることができるようにするには

どちらのプロトコルも、シリアルラインを介してIPパケットをカプセル化するように設計されています。これはまさにユーザーが望むものです。 HTTP 接続は実際に TCP 接続であり、TCP は IP 上で実行され、ネットワーク経由で実行されます。必要に応じてさまざまな接続を接続します。

したがって、PPPを選択する方法であると仮定します。

# on the host machine that has access to the internet
pppd lock proxyarp <host IP>:<VM IP> /path/to/specified/virtioserialsocket

# on the VM
pppd lock defaultroute <VM IP>:<host IP> /dev/virtio-port/<virtioserialdev>

# At this point, you should be able to ping <VM IP>
# from the host, and <host IP> from the VM. If not,
# check `ip route`.
#
# You will now want to set up routing / NAT such that
# either the VM appears as a "normal" computer on the
# network that your host is on, as well, or such that
# all connections to some port are transparently NAT'
# ed over /dev/ppp0 on your host.
# 
# Since that depends on what you're trying to achieve
# here, I can only point out this has been done in a
# lot of other places, and documented.

しかし、率直になりましょう。 virtioを含むQEMUがある場合は、ゲストがネットワークカードをエミュレートし、エミュレートされたネットワークを介してIP操作を実行することもできます。より簡単でパフォーマンスが高く、追加のソフトウェアは不要で、購入後すぐに使用できます!

おすすめ記事