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となる為。
・④はループが発生する為。
TCP1本目接続完了時、すなわちconnect()後にソケットからLOCAL ADDRESSを取得し保存する。
TCP2本目接続処理時、保存しておいたLOCAL ADDRESSを2本目ソケットにbind()し、connect()する。
TCP3本目以降も2本目と同様です。
上記処理を入れると、TCP2本目以降の接続パケットの送信元IPアドレスはTCP1本目と同じアドレスになる。
ルーティングテーブル調整処理ON、OFFに関係なく適用する。
IPV4接続についても同様に修正する。