複数本のTCPコネクション接続処理の不具合?

SoftEther VPN に関するご質問はこのフォーラムにお気軽にご投稿ください。
Post Reply
hiura
Posts: 148
Joined: Wed Mar 10, 2021 1:56 am

複数本のTCPコネクション接続処理の不具合?

Post by hiura » Tue Sep 20, 2022 3:17 am

複数本のTCPコネクション接続処理の不具合?

IPV6接続で、VPN CLIENT接続設定/高度な接続設定/ルーティングテーブル調整処理をOFFでVPN SERVERへ接続した場合
の不具合です。TCP接続処理のバグと思われます。VPN接続の不安定感に悩まされている方は参考に。

1.不具合:
TEST環境は
  • PC1: WIN10 PRO, VPN CLIENT(DEVELOPER EDITION Ver 5.02 Build 5180)
    TCPコネクション数:8本
  • PC2: WIN10 HOME, VPN SERVER(Ver 4.38 Build 9760)
です。

VPN通信に使用するTCPコネクションを複数使用した場合、
TCP1本目のコネクションは物理LANカードとVPN SERVER間で確立するので正常であるが、
TCP2本目以降のコネクションは仮想LANカードとVPN SERVER間で確立するが、使えないコネクションである。
この現象はSTABLE EDITIONでも同じです。

Code: Select all

	使えないコネクションでは、下記の通り、フレームフォーマットに不整合が発生すると思われます。

		受信:
			OS<---③--- 仮想LAN CARD <---②--- VPN CLIENT <---①--- VPN SERVER
			|				       |
			|----------------④---->----------------

					①はTCP1本目のコネクション
					④はTCP2本目以降のコネクション

			・VPN SERVERは SEヘッダー+DATAを①へ送信。
			・VPN CLIENTは受信した①から SEヘッダーを取り除いてDATAのみを②へ送信。
			・OSは受信したDATA③を仮想LAN CARDとひもずいているソケット④へ送信。
			・VPN CLIENTは受信したDATA④から SEヘッダーを取り除こうとするがSEヘッダーはない。破棄される?。

		送信:
			OS---③---> 仮想LAN CARD ---②---> VPN CLIENT ---①---> VPN SERVER
			|				       |
			|------------<----④--------------------

					①はTCP1本目のコネクション
					④はTCP2本目以降のコネクション

			・アプリがDATAを送信するとOSは DATAを③へ送信。
			・VPN CLIENTは受信したDATA②に SEヘッダーを付加し①または④へ送信。
			・①へ送信した場合は正常で、④へ送信した場合はループが発生する。

			④へ送信した場合
			・OSは受信したSEヘッダー+DATA④を③へ送信。
			・VPN CLIENTは受信したSEヘッダー+DATA②にSEヘッダーを付加し①または④送信。
			・①へ送信した場合も、④へ送信した場合も異常ケースである。
			・①はSEヘッダー+DATAでないといけないのに、SEヘッダー+SEヘッダー+DATAとなる為。
			・④はループが発生する為。		
2.対策:
TCP1本目接続完了時、すなわちconnect()後にソケットからLOCAL ADDRESSを取得し保存する。
TCP2本目接続処理時、保存しておいたLOCAL ADDRESSを2本目ソケットにbind()し、connect()する。
TCP3本目以降も2本目と同様です。
上記処理を入れると、TCP2本目以降の接続パケットの送信元IPアドレスはTCP1本目と同じアドレスになる。

ルーティングテーブル調整処理ON、OFFに関係なく適用する。
IPV4接続についても同様に修正する。

Post Reply