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

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

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

Post by hiura » Thu Sep 11, 2025 12:43 am

secure NAT 動作モードについて、

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

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

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

Post by cedar » Thu Sep 11, 2025 12:25 pm

何が原因でカーネルモード NAT が利用できないかはデフォルトではログに残りません。

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

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

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

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

Post by hiura » Fri Sep 12, 2025 8:13 am

たしかに、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.添付
You do not have the required permissions to view the files attached to this post.
Last edited by hiura on Fri Sep 12, 2025 10:48 am, edited 2 times in total.

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

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

Post by cedar » Fri Sep 12, 2025 9:48 am

ユーザーモード仮想 NAT が ICMP を正しく取り扱わないのは仕様のようです。

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

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

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

Post by hiura » Tue Sep 16, 2025 7:51 am

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.添付
You do not have the required permissions to view the files attached to this post.

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

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

Post by cedar » Tue Sep 16, 2025 9:31 am

たしかにバグのようです。
DHCP要求は 0.0.0.0 から送信されるべきなのですが、0.0.0.0 からの送信が禁止されているため
要求パケットの送信に失敗してしまっているのでしょう。

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

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

Post by hiura » Wed Sep 17, 2025 7:34 am

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.添付
You do not have the required permissions to view the files attached to this post.

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

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

Post by cedar » Wed Sep 17, 2025 8:27 am

これはログの方のバグですね。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);

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

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

Post by hiura » Thu Sep 18, 2025 4:00 am

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.添付
You do not have the required permissions to view the files attached to this post.

Post Reply