ルーティングテーブル調整処理の不具合?

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

ルーティングテーブル調整処理の不具合?

Post by hiura » Tue Sep 13, 2022 8:13 am

ルーティングテーブル調整処理の不具合?

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

1.不具合:
関数GetBestRouteEntryFromRouteTableEx()内で取得したルーティングテーブルのインターフェースは
UPの場合もあり、DOWNの場合もあるのに、インターフェースは常にUPしたものとして処理している。

2.対策:
関数GetBestRouteEntryFromRouteTableEx()内でインターフェースがUPかどうかチェックして、UPなら採用し、
それ以外ならそのインターフェースは対象外にする。

3.添付ファイル(対策済み):
GetBestRouteEntryFromRouteTableEx.C (Network.c内の関数 GetBestRouteEntryFromRouteTableEx()を変更)
GetBestRouteEntryFromRouteTableEx.C

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接続できない。
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.

cedar
Site Admin
Posts: 2070
Joined: Sat Mar 09, 2013 5:37 am

Re: ルーティングテーブル調整処理の不具合?

Post by cedar » Tue Sep 13, 2022 9:10 am

安定版ではルーティングテーブルの調整処理は IPv4 にしか行われません。
先進版を使用してみてください。

hiura
Posts: 143
Joined: Wed Mar 10, 2021 1:56 am

Re: ルーティングテーブル調整処理の不具合?

Post by hiura » Tue Sep 13, 2022 9:48 am

>安定版ではルーティングテーブルの調整処理は IPv4 にしか行われません。
>先進版を使用してみてください。
上記は理解しています。

VPN CLIENTは
DEVELOPER EDITION Ver 5.02 Build 5180
です。

VPN CLIENTのソースコードを添付ファイルの通り変更後、
4項のテストを実行するとVPN SERVERへの経路(物理NICのデフォルトGW)がルーティングテーブルに登録されVPN接続できるようになります。

eddiewu
Posts: 286
Joined: Wed Nov 25, 2020 9:10 am

Re: ルーティングテーブル調整処理の不具合?

Post by eddiewu » Tue Sep 13, 2022 3:17 pm

hiuraさんの指摘の通り、GetIpForwardTable2で返された結果に死んでいるルートも含まれてます。ルートがActiveかどうかを確かめる必要があります。

しかし、物理レイヤの関数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;
 };
 

hiura
Posts: 143
Joined: Wed Mar 10, 2021 1:56 am

Re: ルーティングテーブル調整処理の不具合?

Post by hiura » Fri Sep 16, 2022 7:06 am

>この修正を先進版のRepoにPull Request を送ってもらえるでしょうか。
>難しいようであれば、私が送信しても構いません。その場合、hiuraさんをco-authorにしたいので、メールアドレスを教えてください。
ーーー>こちらでは送りません。必要ならそちらで送付願います。co-authorなしでokです。

注:
本件に関しては
2022/09/09に softether-vpn-security@softether.orgあてに添付ファイル付きで、バグの修正依頼はしています。

cedar
Site Admin
Posts: 2070
Joined: Sat Mar 09, 2013 5:37 am

Re: ルーティングテーブル調整処理の不具合?

Post by cedar » Fri Sep 16, 2022 7:32 am

先進版は GitHub のコミュニティベースで開発されており、ソフトイーサ社では先進版のバグ報告については受け付けておりません。

eddiewu
Posts: 286
Joined: Wed Nov 25, 2020 9:10 am

Re: ルーティングテーブル調整処理の不具合?

Post by eddiewu » Fri Sep 16, 2022 8:38 am

ありがとうございます。Pull requestを送信しました。
https://github.com/SoftEtherVPN/SoftEtherVPN/pull/1659

Post Reply