ルーティングテーブル調整処理の不具合?
IPV6接続で、VPN CLIENT接続設定/高度な接続設定/ルーティングテーブル調整処理をONでVPN SERVERへ接続した場合
の不具合です。ルーティングテーブル調整処理のバグと思われます。VPN接続の不安定感に悩まされている方は参考に。
1.不具合:
関数GetBestRouteEntryFromRouteTableEx()内で取得したルーティングテーブルのインターフェースは
UPの場合もあり、DOWNの場合もあるのに、インターフェースは常にUPしたものとして処理している。
2.対策:
関数GetBestRouteEntryFromRouteTableEx()内でインターフェースがUPかどうかチェックして、UPなら採用し、
それ以外ならそのインターフェースは対象外にする。
3.添付ファイル(対策済み):
GetBestRouteEntryFromRouteTableEx.C (Network.c内の関数 GetBestRouteEntryFromRouteTableEx()を変更)
4.テスト:
PC1: WIN10 PRO, VPN CLIENT(DEVELOPER EDITION Ver 5.02 Build 5180)
PC2: WIN10 HOME, VPN SERVER(Ver 4.38 Build 9760)
VPN CLIENTで同一VPN SERVERへの複数の接続設定、例えばA,Bを作り
接続A:仮想NICをVPN、IPV6
接続B:仮想NICをVPN2, IPV6
接続Aを「接続」ーー>「切断」ーー>接続Bを「接続」した場合、
接続Aの仮想NIC(VPN)は死んでいるのにも関わらずその仮想NIC(VPN)がBESTルート(①)となる。②でないといけない。
①aaaa:aaaa:aaaa:aaaa::/ffff:ffff:ffff:ffff:: :: m=291 ifm=35 if=25 lo=1 p=1 <ーーこれがまちがい。
if=25は仮想NIC(VPN)。GWなし(直結?)でプリフィックスは64。ロンゲストマッチの原則で採用された?。
実際のプリフィックスはaaaa:aaaa:aaaa:aaaaと書き換えています。
②::/:: fe80::1eb1:7fff:fe74:aec8 m=41 ifm=25 if=13 lo=0 p=0 <ーーこれが正解。
結果として、VPN SERVERへの経路(物理NICのデフォルトGW)がルーティングテーブルに登録されないのでVPN接続できない。
ルーティングテーブル調整処理の不具合?
-
- Posts: 148
- Joined: Wed Mar 10, 2021 1:56 am
ルーティングテーブル調整処理の不具合?
You do not have the required permissions to view the files attached to this post.
Last edited by hiura on Tue Sep 13, 2022 9:52 am, edited 1 time in total.
-
- Site Admin
- Posts: 2264
- Joined: Sat Mar 09, 2013 5:37 am
Re: ルーティングテーブル調整処理の不具合?
安定版ではルーティングテーブルの調整処理は IPv4 にしか行われません。
先進版を使用してみてください。
先進版を使用してみてください。
-
- Posts: 148
- Joined: Wed Mar 10, 2021 1:56 am
Re: ルーティングテーブル調整処理の不具合?
>安定版ではルーティングテーブルの調整処理は IPv4 にしか行われません。
>先進版を使用してみてください。
上記は理解しています。
VPN CLIENTは
DEVELOPER EDITION Ver 5.02 Build 5180
です。
VPN CLIENTのソースコードを添付ファイルの通り変更後、
4項のテストを実行するとVPN SERVERへの経路(物理NICのデフォルトGW)がルーティングテーブルに登録されVPN接続できるようになります。
>先進版を使用してみてください。
上記は理解しています。
VPN CLIENTは
DEVELOPER EDITION Ver 5.02 Build 5180
です。
VPN CLIENTのソースコードを添付ファイルの通り変更後、
4項のテストを実行するとVPN SERVERへの経路(物理NICのデフォルトGW)がルーティングテーブルに登録されVPN接続できるようになります。
-
- Posts: 286
- Joined: Wed Nov 25, 2020 9:10 am
Re: ルーティングテーブル調整処理の不具合?
hiuraさんの指摘の通り、GetIpForwardTable2で返された結果に死んでいるルートも含まれてます。ルートがActiveかどうかを確かめる必要があります。
しかし、物理レイヤの関数GetIfTable2より、IPレイヤのGetIpInterfaceEntryのほうがもっと適切だと思います。(物理的につながっていてもIPv4/v6プロトコルが動作していない可能性があるからです)
GetIpInterfaceEntryはすでにコードに参照されているから、効率的にも良いです。
この修正を先進版のRepoにPull Request を送ってもらえるでしょうか。
難しいようであれば、私が送信しても構いません。その場合、hiuraさんをco-authorにしたいので、メールアドレスを教えてください。
しかし、物理レイヤの関数GetIfTable2より、IPレイヤのGetIpInterfaceEntryのほうがもっと適切だと思います。(物理的につながっていてもIPv4/v6プロトコルが動作していない可能性があるからです)
GetIpInterfaceEntryはすでにコードに参照されているから、効率的にも良いです。
この修正を先進版のRepoにPull Request を送ってもらえるでしょうか。
難しいようであれば、私が送信しても構いません。その場合、hiuraさんをco-authorにしたいので、メールアドレスを教えてください。
Code: Select all
diff --git a/src/Mayaqua/Network.c b/src/Mayaqua/Network.c
index 83c4d283..b0765976 100644
--- a/src/Mayaqua/Network.c
+++ b/src/Mayaqua/Network.c
@@ -9414,7 +9414,15 @@ RETRY:
{
e = ZeroMallocFast(sizeof(ROUTE_ENTRY));
Win32IpForwardRow2ToRouteEntry(e, &p->Table[i]);
- Add(o, e);
+
+ if (e->Active)
+ {
+ Add(o, e);
+ }
+ else
+ {
+ FreeRouteEntry(e);
+ }
}
FreeMibTable(p);
@@ -9573,6 +9581,7 @@ void Win32IpForwardRow2ToRouteEntry(ROUTE_ENTRY *entry, void *ip_forward_row)
{
entry->IfMetric = p->Metric;
entry->Metric = r->Metric + p->Metric;
+ entry->Active = p->Connected;
}
else
{
diff --git a/src/Mayaqua/Network.h b/src/Mayaqua/Network.h
index daa9464f..c4a04391 100644
--- a/src/Mayaqua/Network.h
+++ b/src/Mayaqua/Network.h
@@ -293,6 +293,7 @@ struct ROUTE_ENTRY
UINT IfMetric;
UINT InterfaceID;
UINT64 InnerScore;
+ bool Active;
};
-
- Posts: 148
- Joined: Wed Mar 10, 2021 1:56 am
Re: ルーティングテーブル調整処理の不具合?
>この修正を先進版のRepoにPull Request を送ってもらえるでしょうか。
>難しいようであれば、私が送信しても構いません。その場合、hiuraさんをco-authorにしたいので、メールアドレスを教えてください。
ーーー>こちらでは送りません。必要ならそちらで送付願います。co-authorなしでokです。
注:
本件に関しては
2022/09/09に softether-vpn-security@softether.orgあてに添付ファイル付きで、バグの修正依頼はしています。
>難しいようであれば、私が送信しても構いません。その場合、hiuraさんをco-authorにしたいので、メールアドレスを教えてください。
ーーー>こちらでは送りません。必要ならそちらで送付願います。co-authorなしでokです。
注:
本件に関しては
2022/09/09に softether-vpn-security@softether.orgあてに添付ファイル付きで、バグの修正依頼はしています。
-
- Site Admin
- Posts: 2264
- Joined: Sat Mar 09, 2013 5:37 am
Re: ルーティングテーブル調整処理の不具合?
先進版は GitHub のコミュニティベースで開発されており、ソフトイーサ社では先進版のバグ報告については受け付けておりません。
-
- Posts: 286
- Joined: Wed Nov 25, 2020 9:10 am
Re: ルーティングテーブル調整処理の不具合?
ありがとうございます。Pull requestを送信しました。
https://github.com/SoftEtherVPN/SoftEtherVPN/pull/1659
https://github.com/SoftEtherVPN/SoftEtherVPN/pull/1659