私は、多数のWindows 10および7 PCを備えた小規模ビジネスネットワークを管理しています。断続的ですが非常に頻繁に、ユーザーは他の同僚と共有フォルダーにアクセスできなくなると不平を言っています。クイックトラブルシューティングは、問題が悪意のある「不明なネットワークが検出された」ためであると判断し、「プライベート」ネットワークプロファイルではなく「パブリック」ネットワークプロファイルを適用するため、ホームグループ/ファイル共有などが機能しません。私の検索から、これは多くのユーザーにとって一般的な問題です。機能する提案された解決策はありません。
環境:
問題:
すべてのWindowsマシンのアクティブネットワークプロファイル=プライベートを構成しましたが、それらは頻繁に(数週間ごとなど)パブリックに戻るため、ファイル共有などができません。
試行された修正:
各Windows PCでローカルグループポリシーを変更しましたComputer Configuration->Security Settings->Network List Manager Policies
:
観測:
問題は、Windows Network Location Awareness(NLA)サービスが新しいネットワークプロファイルを作成する新しいネットワークプロファイルを作成することを検出していることであると考えています。 。多くのコンピューターは、Windowsが新しい未確認のネットワークを何度も検出したことを示しています。つまり、「ネットワーク14」を示しています。つまり、14の異なるネットワークプロファイルがあります。レジストリでプロファイルを確認すると、これらの複数のプロファイルが表示されます:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles
。
14個のプロファイルはすべて、コンピュータが上記の同じネットワークに実際に接続されたときのものです。
NLAがネットワークの一意の識別子を生成する方法を正確に説明するリソースを見つけられなかったため、新しいネットワークが検出されたことが検出される場合があります。
質問:
Windowsがローカルネットワークを新しいネットワークとして誤って識別しないようにするにはどうすればよいですか?おそらく、ネットワークの一意の識別子を生成するためにNLAが従う手順を知っていれば役立つでしょう。
私が維持している1つの環境の重要なWindows Serverシステムでこの問題に対処した1つの方法は、 Set-NetConnectionProfile と netsh を使用し、明示的に設定するバッチスクリプトを使用することでしたマシン上の各信頼済みNIC /アダプタをprivateにシステムの起動タスクスケジューラ でRun whether user is logged on or not
およびRun with highest privileges
オプションを使用して。
注:賞金通知に「ソリューションが実装するネットワーク接続の損失を引き起こしてはならない」とありますが、この問題が発生したときから、とにかくネットワークの混乱があります。システムが再起動されないときに問題がランダムに発生した場合にこのスクリプトを実行するだけで、同じスクリプトを実行するだけで問題が迅速に解決され、OSマシンのネットワークアクセスが正常な順序で実行されます。
さらに、 Get-NetConnectionProfile を使用してNIC=エイリアス名とインデックス番号を取得し、ニーズやシステムに応じて以下のサンプルバッチスクリプトに追加できます。
@ECHO ON
::: The below PowerShell will set all the nework adapters to private rather than public and unknown as happens.
:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO Set-NetConnectionProfile -InterfaceIndex 12 -NetworkCategory Private>>"%PSScript%"
ECHO Set-NetConnectionProfile -InterfaceIndex 20 -NetworkCategory Private>>"%PSScript%"
ECHO Set-NetConnectionProfile -InterfaceIndex 22 -NetworkCategory Private>>"%PSScript%"
ECHO Set-NetConnectionProfile -InterfaceIndex 24 -NetworkCategory Private>>"%PSScript%"
:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
:: The below will disable and then re-enable each NIC one-by-one so the unidentfied goes away after set to "private" above
:ResetNICs
SET Array="Ethernet", "Ethernet 2", "Ethernet 3", "Ethernet 4"
FOR %%A IN (%Array%) DO (
netsh int set int "%%~A" admin=disable
netsh int set int "%%~A" admin=enable
)
EXIT
以下にいくつかの他の方法を示します。そのうちの1つはあなたが試したものですが、役立つ場合に備えてこの投稿に出くわした他の人のために残しましたが、これらは完全にこれを防ぐいくつかの方法ですが、常にあなたが使用することを選択したどの方法にも利点と欠点があるので、毒を選び、それに応じてテストしてください。
不明なネットワーク-パブリックからプライベートまたはドメインに移動
NLAが接続場所を特定できない場合は、「不明」という名前を付け、その場所をパブリックとしてマークします。最も安全であり、接続がDMZ上にある場合はそれ以上必要ないので、パブリックを選択します。
これを修正する簡単な方法が2つあります。ローカルセキュリティポリシーを使用して、識別されていないネットワークのデフォルトの場所を変更します。 2番目の方法では、ネットワーク接続プロパティの変更を使用して、場所を適切に配置するために必要な情報をNLAに提供します。
ローカルセキュリティポリシーの使用
注意:これは、コンピューターがパブリックLANに接続できない場合にのみ使用してください。そうしないと、パブリック接続に安全性の低いファイアウォールプロファイルが適用される危険性があります。
「ローカルセキュリティポリシー」を開きます。
左側のペインで「Network List Manager Policies」をクリックします。 (この選択は、古いバージョンのWindowsに埋め込まれています。)
右側のペインで「nidentified Networks」をダブルクリックします。
プライベートネットワーク上にのみ存在するコンピューターの場合、 "Location type"を "private"に設定しても問題ありません。
ネットワーク接続プロパティの使用
マルチホームサーバーではゲートウェイIPが正しく機能しないため、これはゲートウェイIPの追加に関するものではありません。代わりに、DNSサフィックスを追加して、NLAがドメインコントローラーを適切に特定できるようにします。これにより、その場所を「ドメインネットワーク」としてマークすることができます。
ネットワーク接続に移動します(ネットワークと共有センターから、[アダプターの設定の変更]をクリックします)。
"nidentified"とマークされているがプライベートLANにある1つのネットワーク接続のpropertie sに移動します。
IPv4のプロパティに移動します。
「詳細 ...」ボタンをクリックします。
[〜#〜] dns [〜#〜]タブを選択します。
「この接続のDNSサフィックス:」のテキストボックスにドメイン名を入力します。
接続を無効にしてから有効にし、NLAが場所を再識別できるようにします。接続を有効にすると、ステータスがドメイン名に変わり、ネットワークカテゴリが「ドメインネットワーク」に変わります。設定によっては、関連するすべての接続を取得してドメインを表示するために、1つの接続のみを「修正」する必要がある場合があります。
プライベートからパブリックに移動
NLAに接続をパブリックとしてマークさせる一般的な方法は2つあります。 1つは、ファイアウォールルールを使用してNLAをブロックし、デフォルトの場所を使用する以外に選択肢がないことです。もう1つは、レジストリを使用して接続のNLAを無効にすることです。
ファイアウォールの使用
私はこれをテストしていませんが、理論は正しいようです。
"セキュリティが強化されたWindowsファイアウォール"を開きます(つまり、
wf.msc
)。送信規則に移動します。
「新しいルール…」をクリックします。
次の設定を使用します。
- ルールタイプ:カスタム
- プログラム:「すべてのプログラム」を選択し、「カスタマイズ…」をクリックします。 [Network Location Awareness](短い名前はNlaSvc)を選択します。
- プロトコルとポート:プロトコルタイプ=任意。
- スコープ:ローカルIP =すべてのパブリックIPを入力します。複数のIPとの接続を再確認します。
- アクション:ブロック
- プロファイル:すべて
ルールが有効になったら、ネットワーク接続を無効にしてから有効にして、NLAが場所を再識別できるようにします。
レジストリの使用
私はこの仕事をしていませんが、私の状況はあなたのものとは異なるかもしれません。正しい接続番号を見つけることは、予想よりもはるかに多くのエントリがあるため、多少の失敗です。
Regeditを実行する
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
に移動その下に、0000、0001、0002などのラベルが付いたいくつかのキーが表示されます。これらを調べて、NLAを無効にするアダプターを見つけます。
アダプターごとに、「* NdisDeviceType」という名前の新しいDWORD値を追加し、1に設定します(名前の先頭に*が付いていることを確認してください)。
抜本的に
ロケーションプロファイルはレジストリに格納されており、それらを削除してWindowsで再構築しても問題はないようです。あなたは間違いなく最初にレジストリをバックアップしたいと思うでしょう、そしておそらくリモート(RDP)ではなくKVM経由でサーバーに接続する必要があります。このステップを選択した場合、私は責任を負いません私は主にこれを参照のためにここに置いています。
プロファイルの場所は次のとおりです。
HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles
この問題は1つの特定のシステムで限りなく発生しました。再起動するたびにすべてが壊れます。私はあなたが言及したすべての解決策を試しました。他のすべてを使い果たした後、「ネットワークロケーション認識」サービスを無効にすることに頼りました。私が言えることから、それは必要ありません。これで私の問題は完全に解決しました。私が気付いた唯一の副作用は、「ネットワークと共有センター」ウィンドウがおかしく見えることです。このサービスはWindows 7以前には存在しなかったため、私にはまったく役に立ちませんでした。
Services.msc
"Network Location Awareness"、スタートアップの種類= "無効"