コンテンツにスキップ

ネットワークオーバーレイ

オーバーレイネットワーク(SOCKS5 プロキシ、Tor、Tailscale メッシュ、I2P)を介して送信トラフィックをルーティングし、リスナーをバインドします。オーバーレイの選択は呼び出しごとのオプトインで、関数、プロセス、HTTP の境界を越えて継承されます。

Kind説明
network.socks5汎用 SOCKS5 プロキシ(Tor の SOCKS5 リスナーもカバー)
network.tailscaleTailscale tsnet オーバーレイノード
network.i2pI2P SAM v3 ブリッジ
- name: proxy
kind: network.socks5
host: 127.0.0.1
port: 1080
username: "optional"
password: "optional"
isolate_streams: false
フィールド説明
hoststringプロキシホスト
portintプロキシポート (1-65535)
usernamestringオプションの SOCKS5 認証
passwordstringオプションの SOCKS5 認証
isolate_streamsbool接続ごとのランダム認証情報(Tor ストリーム分離)
- name: tailnet
kind: network.tailscale
hostname: "wippy-node"
auth_key_env: "TS_AUTHKEY"
ephemeral: false
control_url: ""
フィールド説明
hostnamestringtsnet ノード名(ノードごとの状態ディレクトリで使用)
auth_keystringインライン tailnet 認証キー
auth_key_envstring認証キーを保持する環境変数名(env レジストリで解決)
state_dirstringtsnet 状態ディレクトリのオーバーライド
control_urlstring代替調整サーバー
ephemeralboolエフェメラル tailnet ノードとして登録

auth_key または auth_key_env のいずれかが必要です。

- name: i2p_bridge
kind: network.i2p
host: 127.0.0.1
port: 7656
session_name: "wippy"
フィールド説明
hoststringSAM v3 ブリッジホスト
portintSAM v3 ブリッジポート
session_namestringオプションのセッション識別子

サーバーリスナーをオーバーレイ(Tailscale、I2P)経由でバインドします:

- name: gateway
kind: http.service
addr: ":8080"
network: app.net:tailnet

SOCKS5 はインバウンドリスニングをサポートしません — 送信ダイヤルにのみ使用してください。

with_options を使用して、呼び出された関数または生成されたプロセスをオーバーレイ経由でルーティングします:

local funcs = require("funcs")
local result, err = funcs.new()
:with_options({ network = "app.net:proxy" })
:call("app.api:fetch_data")
local pid, err = process.with_options({ network = "app.net:tailnet" })
:spawn_monitored("app.workers:probe", "app:processes")

http_client モジュールは、呼び出しごとのオプションの overlay_network キーで同じオーバーレイ選択を受け入れます。

オーバーレイの選択は呼び出しスタックを流れます。funcs.new():with_options({network=...}) 経由で呼び出された関数は、すべての内部ダイヤル、すべてのネストされた funcs.call、および実行するすべての process.spawn でオーバーレイを見ます — 子孫が明示的に別のオーバーレイを選択するかクリアするまで。

アンビエント継承は子孫自身の network.select 拒否ルールをバイパスします。Lua のエッジでの明示的な選択のみがゲートされます。

オーバーレイドライバは、.wippy.yamlnetwork_service: ブロックからアプリ全体の設定を読み込みます:

network_service:
state_dir: .wippy/net # ドライバ状態のベースディレクトリ(Tailscale キーなど)
default_network: app.net:tailnet # 呼び出し側が設定しない場合に使用されるオーバーレイ
フィールドデフォルト説明
state_dir.wippy/netドライバ状態用のディレクトリ。相対パスはブート設定ディレクトリを基準に解決されます。
default_networkオプションで独自のネットワークを設定しないすべてのタスクまたはプロセスに適用されるオーバーレイのレジストリ ID。

オーバーレイエントリはレジストリ更新時にホットスワップされます。オーバーレイの設定が変更されると、ドライバはまず置き換え用のサービスを構築し、それが正常に作成された場合にのみ切り替えます。新しい設定が失敗した場合は、既存のオーバーレイがそのまま稼働を続けます。同時に呼び出した側は、古いサービスか新しいサービスのいずれかを見ることになり、間隙が生じることはありません。

アクションリソース説明
network.selectネットワーク Registry IDfuncs.callprocess.spawnhttp_client での明示的なオーバーレイ選択
network.bindネットワーク Registry IDhttp.service リスナーをオーバーレイ経由でバインド(network: フィールド)

スコープで network.select を拒否して、その中のコードが明示的にオーバーレイを選択するのを停止します。継承されたオーバーレイは影響を受けません — 呼び出し元で承認済みです。network.bind は、network: オーバーレイを持つサーバーがリスナーを開始するときにチェックされます。