Page 1 of 1

secure NATが、カーネルモードにならない

Posted: Thu Sep 11, 2025 12:43 am
by hiura
secure NAT 動作モードについて、

secure NATが、カーネルモードで実行されないのですが、何が原因か調べる方法はありますか?

Re: secure NATが、カーネルモードにならない

Posted: Thu Sep 11, 2025 12:25 pm
by cedar
何が原因でカーネルモード NAT が利用できないかはデフォルトではログに残りません。

SecureNAT は DHCP で IP アドレスを取得できて、かつ DHCP で与えられたゲートウェイ情報で、インターネットとの疎通性があるインターフェイスを WAN 側として探しますが、これに失敗するとカーネルモード NAT が利用できません。

https://ja.softether.org/4-docs/3-kb/VPNFAQ036

Re: secure NATが、カーネルモードにならない

Posted: Fri Sep 12, 2025 8:13 am
by hiura
たしかに、WIRESHARKでパケットをCAPTUREしてみると、ケース①では、DHCPメッセージがVPN SERVERから出ていません。
ケース②では出ていました。VPN 5.0のバグですかね?

また、
NAT のセッションテーブルの表示がVPN 4.0と5.0では違います。ICMP, PORT 137に関して。
TRACERTの表示もVPN 4.0と5.0では違います。VPN 5.0では最初と最後のルータのIP アドレスしか表示しない。


1.構成

①PC1:VPN SERVER<---PC2:VPN CLIENT
②PC1:VPN CLIENT--->PC2:VPN SERVER

PC1:
OS:WIN11 PRO 24H2
VPN:VPN V5.02B5187(VPNTEST.EXE S, VPNTEST.EXE C。CLIENT SERVERはどちらかを起動)

PC2:
OS:WIN11 HOME 23H2
VPN:VPN V4.44B9807(CLIENT, SERVER共インストール済み。CLIENT SERVERはどちらかを起動)


2.結果
VPNサーバがVPN 5.0 DEVELOPER EDITIONの場合(①)、SecureNATはユーザモードで実行、VPNサーバがDHCP送信しない
VPNサーバがVPN 4.0の場合 (②)、SecureNATはカーネルモードで実行、VPNサーバがDHCP送信した


3.添付

Re: secure NATが、カーネルモードにならない

Posted: Fri Sep 12, 2025 9:48 am
by cedar
ユーザーモード仮想 NAT が ICMP を正しく取り扱わないのは仕様のようです。

https://ja.softether.org/4-docs/1-manua ... B.E9.A0.85

Re: secure NATが、カーネルモードにならない

Posted: Tue Sep 16, 2025 7:51 am
by hiura
1.Secure NATがカーネルモードにならないのは、VPN 5.0 のバグのようです。

ファイルIPC.C内の関数 IPCSendIPv4()でエラーreturnしています。結果DHCP Failed.になる。

// Filter the source IP address
if (CmpIpAddr(&ip_src, &ipc->ClientIPAddress) != 0)
{
Debug("___ERROR___IPCSendIPv4 ip_src=%r is not ipc->ClientIPAddress=%r IsIP6(ip)=%X\n", &ip_src, &ipc->ClientIPAddress, IsIP6(&ipc->ClientIPAddress)); // by HIURA
// Cut off packets from illegal IP address
return;
}

変数 ipc->ClientIPAddressの値がIPV6になっています。この変数はどこで定義するのでしょうか?


2.添付

Re: secure NATが、カーネルモードにならない

Posted: Tue Sep 16, 2025 9:31 am
by cedar
たしかにバグのようです。
DHCP要求は 0.0.0.0 から送信されるべきなのですが、0.0.0.0 からの送信が禁止されているため
要求パケットの送信に失敗してしまっているのでしょう。

Re: secure NATが、カーネルモードにならない

Posted: Wed Sep 17, 2025 7:34 am
by hiura
Continued

1.仮処置
ファイルVirtual.C内の関数NnGetNextInterface()で未定義値変数ret->Ipc->ClientIPAddressを参照しているみたいです。
定義値変数(IPV4のIPアドレスをセット)にするコードを追加した。

// Make my IP address zero to avoid error when filtering the source IP address by IPCSendIPv4() on SEP.17, 2025.
UINTToIP(&ret->Ipc->ClientIPAddress, 0);


修正後実行した結果、DHCP サーバーアドレスがIPV6になっている。これもバグ。添付参照。

DHCP サーバーアドレス:"c0a8:1:8051:100 :: "

2.添付

Re: secure NATが、カーネルモードにならない

Posted: Wed Sep 17, 2025 8:27 am
by cedar
これはログの方のバグですね。IP 型を期待するフォーマッタに UINT 型でIPアドレスを渡してしまっているようです。

NLog(t->v, "LH_KERNEL_MODE_START", a->DeviceName,
&a->Ipc->ClientIPAddress, &a->Ipc->SubnetMask, &a->Ipc->DefaultGateway, &a->Ipc->BroadcastAddress,
macstr, &a->CurrentDhcpOptionList.ServerAddress, &a->DnsServerIP);

Re: secure NATが、カーネルモードにならない

Posted: Thu Sep 18, 2025 4:00 am
by hiura
Continued.

1.仮処置
Virtual.C内の関数NativeNatThreadを変更。

IP dhcp_ip; // Added on SEP.17, 2025.
...

UINTToIP(&dhcp_ip, a->CurrentDhcpOptionList.ServerAddress); // Added on SEP.17, 2025.
NLog(t->v, "LH_KERNEL_MODE_START", a->DeviceName,
&a->Ipc->ClientIPAddress, &a->Ipc->SubnetMask, &a->Ipc->DefaultGateway, &a->Ipc->BroadcastAddress,
macstr, &dhcp_ip, &a->DnsServerIP); // IP address for argument must be of type IP. not UINT. on SEP.17, 2025.

2.添付