LoginSignup
0
1

More than 3 years have passed since last update.

ソースルーティング試験ツールとしてのStreamRelay.NET.exe

Posted at

IPv4 オプションに、ソースルーティングと呼ばれる機能がある

これは、送信者が通信経路(ルーティング)を制御できるというものである

通常、通信経路(ルーティング)は、経路上のルータなどに委任しているのだけど、それをパケットの送信者が制御するというもの

ソースルーティングには、ストリクトソースルーティングとルーズソースルーティングの2種類がある

  • ストリクトソースルーティングは、経路全てのアドレスを明記するというもので(明記していないルータは経由してはいけない)、インターネット上ではあまり現実的ではない
  • ルーズソースルーティングは、経路上のポイントとなるルータのアドレスだけ明記するというもので、そのポイントとか送信先との間の経路はルータに委任するというもの

IPv4拡張自体が、40バイトしか空間がないので、設定できるIPv4アドレスは9個まで


netcat

いろいろなnetcatがソースルーティングに対応していると思うけど、私の記憶だと、オリジナルのnetcat は、FreeBSD上でコンパイルしたncはソースルーティングができたけど、Linux上でコンパイルするとできなくなったという記憶
(このソースルーティングしたくなった時のためだけに私は FreeBSD の仮想環境を一つ保存している)
また、Windows上のnc.exeは、クライアントとしてソースルーティング機能は使えないけど、ソースルーティングパケットを受信する側のサーバ側としては機能しているという記憶

なんか、ncat でもソースルーティングに対応しているようだけど、よく知らない。


StreamRelay.NET.exe

ver3.4.0.0 から、クライアント側でソースルーティングに対応した。


本体の対応

「-RemotePort」が0以上だと、TCP(またはUDP)クライアントとして動作するのですが、その際に以下のオプションで、その(TCPまたはUDPの)接続で、ソースルーティングに対応する

参考: ポートフォワーダとしての StreamRelay.NET.exe

  • -RemoteLSR ≪CSVなIPアドレスのリスト≫
  • -RemoteSSR ≪CSVなIPアドレスのリスト≫
  • -RemoteLSR2nd ≪CSVなIPアドレスのリスト≫
  • -RemoteSSR2nd ≪CSVなIPアドレスのリスト≫

  • LSR はルーズソースルーティングを意味

  • SSR はストリクトソースルーティングを意味

なので、
nc.exe -nvv -g 192.0.2.10,192.0.2.11 -G 4 192.0.2.1 80

StreamRelay.NET.exe -LocalPort 0 -RemotePort 80 -RemoteHost 192.0.2.1 -RemoteLSR 192.0.2.10,192.0.2.11

は同じ

UDP の場合も同様

nc.exe -nvv -u -g 192.0.2.10,192.0.2.11 -G 4 192.0.2.1 80

StreamRelay.NET.exe -LocalPort 0 -RemotePort 80 -RemoteHost 192.0.2.1 -RemoteLSR 192.0.2.10,192.0.2.11 -RemoteUdp

は同じ


本体の対応(分離接続)

bash仮想ネットワークファイルのお相手としての StreamRelay.NET.exeで紹介したように、2つの通信をそれぞれ入力と出力に分けて、一つの入出力とすることができる。

例えば、TCP接続の一本を入力用、もう一本のTCP接続を出力用という使い方もできる。(TCPだけじゃなくて、UDPと混在させることも可能)

それについても、ソースルーティングに対応している。

オプションの「RemoteLSR2nd」とか「RemoteSSR2nd」とか「2nd」と付いているのがそれ

StreamRelay.NET.exe -LocalPort 0 -RemotePort 80 -RemoteHost 192.0.2.1 -RemoteLSR 192.0.2.10,192.0.2.11 -RemotePort2nd 90 -RemoteHost2nd 192.0.2.2 -RemoteLSR2nd 192.0.2.20,192.0.2.21 -RemoteSeparateConnection

とすると、「Remote」と呼称される側の入力側は、192.0.2.10→192.0.2.11→192.0.2.1:80 という経路の通信であり、出力側は、192.0.2.20→192.0.2.21→192.0.2.2:90という経路の通信となる


プラグインの対応(stdioTCP.dll)

ポート番号の指定が「0」の時は、標準入出力になるという事で、そのリダイレクト先がTCPとなるプラグインなのですが、これについても以下のオプションでソースルーティングに対応した

  • -RemoteInputTCPLSR ≪CSVなIPアドレスのリスト≫
  • -RemoteInputTCPSSR ≪CSVなIPアドレスのリスト≫
  • -RemoteOutputTCPLSR ≪CSVなIPアドレスのリスト≫
  • -RemoteOutputTCPSSR ≪CSVなIPアドレスのリスト≫
  • -RemoteTCPLSR ≪CSVなIPアドレスのリスト≫
  • -RemoteTCPSSR ≪CSVなIPアドレスのリスト≫

元々、標準入出力のリダイレクト先なので、「入力」と「出力」を別々に設定できる。

なので、「Remote」と呼称される側の入力について、ルーズソースルーティングにするのが、

  • -RemoteInputTCPLSR ≪CSVなIPアドレスのリスト≫

で、出力側だけルーズソースルーティングしたい場合は、

  • -RemoteOutputTCPLSR ≪CSVなIPアドレスのリスト≫

入出力をルーズソースルーティングしたい場合は、

  • -RemoteTCPLSR ≪CSVなIPアドレスのリスト≫

を指定する

当然だけど、このプラグインを呼び出すために、ポート番号は「0」。以下のオプションが必要

  • -RemoteTCPHost
  • -RemoteInputTCPHost
  • -RemoteOutputTCPHost

上記で、標準入出力を TCP へリダイレクトするという設定なので、これがまず必要


プラグインの対応(stdioICMPTunnel.dll)

これもポート番号の指定が「0」の時は、標準入出力になるという事で、そのリダイレクト先がICMPTunnel などのトンネルプロトコルとなるプラグインなのですが、これについても以下のオプションでソースルーティングに対応した

  • LSR=≪CSVなIPアドレスのリスト≫
  • SSR=≪CSVなIPアドレスのリスト≫

これは、以下のオプションの一部として指定する

-LocalInputIcmpTunnel
-LocalOutputIcmpTunnel
-RemoteInputIcmpTunnel
-RemoteOutputIcmpTunnel

当然だが、IPv6 では無理だし、IPv4拡張にデータを含めるタイプのトンネルプロトコルの場合も無理。


目次へ戻る

目次というか最初の一歩

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1