ネットワークマニフェスト #
Actcast アプリケーションの動作に必要なリソースを指定する Manifesto の中で "networks"
フィールドに接続先を指定することで、必要な通信を行うことが出来るようになります。
特にこの指定を指して ネットワークマニフェスト
と呼びます。
接続先の指定 #
ネットワークマニフェストには接続先を指定する方法が 3 種類あります。 ドメインを指定する方法、ローカルネットワーク全体を指定する方法、マルチキャストアドレスを指定する方法です。 前者二つの指定では指定したアドレスへの接続のみを許可する SOCKS プロキシが起動し、これを通した通信を行う必要があります。 マルチキャストアドレス指定の場合は、特別な手順を踏むこと無く通常通りの通信が可能になります。
ドメインを指定する方法 #
domain
, port
, protocol
の組み合わせを指定します。
key | description |
---|---|
domain | 接続先のインターネットホスト名 |
port | 接続先のポート番号 |
protocol | 接続時のプロトコル ("tcp" or "udp" ) |
domain
内のワイルドカード
#
接続先の domain
はワイルドカード (*
) を使用することで一部を任意の値として指定することもできます。
ワイルドカードはサブドメインの位置に使用でき、任意の英数字やハイフンにマッチします。
例: Amazon API Gateway
以下の Amazon API Gateway の REST API の URL の場合、https://{restapi_id}.execute-api.{region}.amazonaws.com
の restapi_id
と region
を任意の値としたい場合は以下のように指定します。
*.execute-api.*.amazonaws.com
ワイルドカードは階層ごとに指定する必要があります。
例: {foo}.example.com
と {bar}.{foo}.example.com
に接続させたい場合
以下の 2 つを指定します。
*.example.com
*.*.example.com
例: {foo}.example.com
と example.com
に接続させたい場合
以下の 2 つを指定します。
*.example.com
example.com
ローカルネットワーク全体を指定する方法 #
local_addr
, port
, protocol
の組み合わせを指定します。IPv4 のプライベートアドレスの範囲(10/8
, 172.16/12
, 192.168/16
)と IPv6 のユニークローカルアドレスの範囲(FD00::/8
)に接続できるようになります。
key | description |
---|---|
local_addr | ローカルアドレスを許可 (true のみ指定可能) |
port | 接続先のポート番号 |
protocol | 接続時のプロトコル ("tcp" or "udp" ) |
スキーマの詳細な定義はhttps://actcast.io/schema/v6/manifesto_schema.jsonを確認して下さい。
例: ローカルネットワーク上の HTTP サーバへ接続する場合
デバイスの配置されたローカルネットワーク上にあるサーバの 80 番ポートにアクセスする場合、以下のように設定します。
"networks": [
{ "local_addr": true, "port": 80, "protocol": "tcp" }
]
マルチキャストアドレスを指定する方法 #
multicast_addr
, port
, protocol
, direction
を指定します。
IP マルチキャスト通信は 1 対多通信の 1 方向通信プロトコルです。このため direction
で
送受信方向を指定します。
key | description |
---|---|
multicast_addr | 通信先のマルチキャストアドレス (224.0.0.0/4 ) |
port | 通信先のポート番号 |
protocol | 通信プロトコル ("udp" のみ指定可能) |
direction | 送受信の種別 ("send" or "recv" ) |
スキーマの詳細な定義はhttps://actcast.io/schema/v6/manifesto_schema.jsonを確認して下さい。
例: RTP サーバからマルチメディアデータを受信する場合
224.0.0.120
の RTP サーバからマルチキャストで配信されるデータを受信する場合、以下のように設定します。
"networks": [
{ "multicast_addr": "224.0.0.120", "port": 5001, "protocol": "udp", "direction": "recv" }
]
プロキシへの接続 #
ACTCAST_SOCKS_SERVER
ACTCAST_SOCKS_SERVER
は Actcast アプリケーションのコンテナ起動時に設定される環境変数です。この環境変数には SOCKS プロキシのアドレスとポートが <IPアドレス>:<ポート番号>
の形式で設定されています。
ネットワークマニフェストでドメインを指定する方法またはローカルネットワーク全体を指定する方法を使用した場合、指定したホストへ接続する際はこの環境変数で指定されたアドレスを使用します。
Examples #
ネットワークマニフェストを使用する例をご紹介します。
Python アプリケーションで https://actcast.io にアクセスする #
Python アプリケーションで SOCKS プロキシを利用する場合、例えば Requests パッケージと PySocks パッケージを利用できます。
これらを使用する場合、以下のように.actdk/dependencies.json
のpip
にrequests
とpysocks
を追加します。
{
...
"pip": [
...
"requests",
"pysocks"
]
}
次に、manifesto/*.json
で接続先を指定します。今回はhttps://actcast.io
にアクセスしたいため、以下のように指定します。
{
...
"networks": [
{
"domain": "actcast.io",
"port": 443,
"protocol": "tcp"
}
]
}
最後に、proxies
付きのrequests.get()
を呼びます。URI Scheme としてsocks5h
を指定することで SOCKS プロキシ側で名前解決させる必要があります。
import os
import requests
requests.get(
'https://actcast.io',
proxies={
'https': f'socks5h://{os.environ["ACTCAST_SOCKS_SERVER"]}'
}
) # => <Response [200]>
Python アプリケーションでローカルネットワーク上の別のサーバにアクセスする #
Pythonアプリで https://actcast.io にアクセスする
例と同じく.actdk/dependencies.json
のpip
にrequests
とpysocks
を追加します。
次に、ローカルネットワーク上の別のマシンで$ python3 -m http.server 80
を実行することでサーバを起動しておきます。
次に、manifesto/*.json
で"local_addr": true
を指定します。
{
...
"networks": [
{
"local_addr": true,
"port": 80,
"protocol": "tcp"
}
]
}
最後に、proxies
付きのrequests.get()
を呼びます。
Python アプリケーションで https://actcast.io にアクセスする例とは違い名前解決は不要なためsocks5h
ではなくsocks5
を指定しています。
import os
import requests
requests.get(
'http://192.168.1.100',
proxies={
'http': f'socks5://{os.environ["ACTCAST_SOCKS_SERVER"]}'
}
) # => <Response [200]>