WinNATでHyper-V環境でお手軽にNAT構成(Windows Server 2016以降、Windows10 Anniversary Update以降)

検証環境がガラッと変わりまして、Windows Server 2019のHyper-V環境でインターネットには2回NATが必要な状況になりました。 RRASサービスを使うか、NAT専用のVMを構築しようかとも思いましたが、Windows NAT(WinNAT)で簡単にHyper-V環境でのNATが構成可能になっているのでWinNATを利用して構成しました。 公式ドキュメントは下記です。 NAT ネットワークのセットアップ | Microsoft Docs 構成は管理者権限のPowerShellで簡単にできます。下記は例。 N N N e e e w w w - - - V N N M e e S t t w I N i P a t A t c d h d - r N - e a S s m w s e i t - M c I y h P N N A A a d T m d n e r e e t " s w S s o w r i 1 k t 9 c 2 - h . I N 1 n a 6 t m 8 e e . r " 0 n . a - 1 l S I w - P i P I t r n c e t h f e T i r y x f p L a e e c n e I g A n t d t h d e r r 2 e n 4 s a s l - P I r n e t f e i r x f a 1 c 9 e 2 I . n 1 d 6 e 8 x . 0 2 . 4 0 / 2 4 単純に ...

October 1, 2020 · 7 min · 胡田昌彦

Google DriveがNATテーブルを全て消費してインターネット接続が出来なくなる

先日、自宅のネットワークで「インターネットに接続できない」というトラブルがありました。事象としては以下の様な感じです。 - ブラウザ等でインターネットに接続できない - nslookupでの名前解決は出来ている - ADSLルーターを再起動すると一時的に接続可能になるが、しばらくするとまた接続できなくなる - ただし、完全にインターネットへの接続が出来ないわけではなく、稀に成功することもある 嫁さんからの連絡でこの事象に気がついたのですが、良く調べてみると結局ルーターのNATテーブルがGoogle Driveによって食いつぶされているのが原因でした。 512件しか登録出来ないところを512件全て使い切ってしまっています。この状態ではきちんとNATが維持出来ずTCPコネクションが確立し続けられない事になります。 UDP1発の往復ですぐに終わるnslookupはうまく動作していたこととも整合性があります。(NATテーブルの維持時間が短くてもすぐに動作完了するので成功する) netstat –anbで利用しているポートを確認した所、googledrivesync.exeが原因でした。 とりあえずgoogle driveのプロセスを終了した所正常に通信できるようになりました。 google driveの同期先のサーバーに障害でも発生していたのでしょうか?ちょっとそこまではよくわかりませんが、とりあえず数日おいてから同期を再度開始してみたら問題は特に再現しませんでしたので、一過性のものとして判断しています。

February 25, 2015 · 1 min · 胡田昌彦

NAPT

ここまでNAT関連で以下のエントリを書きました。 - [NAT(Network Address Translation)の基本](https://windowsadmin.ebisuda.net/2011/01/12/natnetwork-address-translation%e3%81%ae%e5%9f%ba%e6%9c%ac/) - [1対1 NAT](https://windowsadmin.ebisuda.net/2011/01/19/1%e5%af%be1-nat/) 1対1NATではシンプルに2つのIPが相互に変換される動きをみました。シンプルですが、IPアドレスが沢山必要になってしまうという欠点もありました。今回はより「よく使われているNAT」であるNAPTを見ていこうと思います。 ### ブロードバンドルータ経由で複数のPCがインターネットに同時に接続する [![](https://windowsadmin.ebisuda.net/wp-content/uploads/2011/02/image_thumb6.png)](https://windowsadmin.ebisuda.net/wp-content/uploads/2011/02/image6.png) 上記のような環境を考えてみます。家庭内にPCが2台あって、同時にインターネットに出るようなイメージですね。PC1,PC2が同時にWeb Serverに対してWebサイトの閲覧を行おうとしたとします。 WEBサーバーへの通信を開始するので、以下のパケットを生成します。WEBサーバーを想定していますので宛先のポート番号は80番。送信元のポート番号はランダムなポートになりますがここでは1024番にしておきます。 PC1が生成したパケット PC2が生成したパケット 上記パケットがブロードバンドルーターまで届きました。ここでNATが行われます。まず、前回解説した通り宛先IPアドレスは変更されませんし、宛先のポート番号も変更されません(Web Serverの気持ちになってみれば、これは当然です)。送信元IPアドレスはブロードバンドルーターの持っているグローバルアドレスになります(ほかにグローバルIPアドレスはありませんので)。問題はこのときの送信元ポート番号を何番にするか、ということです。どのようにすべきかちょっと考えてみてください。複数のPCが存在していることを考慮してみてくださいね。 ・・・。 ・・・。 ・・・。 考えてもらえましたでしょうか。正解は1つではないです。結局送信元のポート番号はランダムに選ばれていますので、基本的には何番でもかまわないからです。ただ、以下のことは考慮しないといけません。 - 送られてきたパケットと同じ送信元ポート番号を使うことにした場合、他のPCからも同じ送信元ポート番号のパケットが送られてきたときの考慮が必要。(同じ送信元ポート番号を使うと、どちらのPCにひもづいた通信なのかわからなくなってしまう。) - ブロードバンドルーターからも通信を開始する可能性があり、そのときの通信とも重複しないようにする必要がある。 通信が混ざる、混ざらないということに関しては、TCPのコネクションの概念を理解していないと理解できないです。このあたりの理解が難しければ、以下のエントリを参照してもらえればと思います。 - [レイヤ4 -トランスポート層- ポート番号](https://windowsadmin.ebisuda.net/2009/10/06/%e3%83%ac%e3%82%a4%e3%83%a44-%e3%83%88%e3%83%a9%e3%83%b3%e3%82%b9%e3%83%9d%e3%83%bc%e3%83%88%e5%b1%a4-%e3%83%9d%e3%83%bc%e3%83%88%e7%95%aa%e5%8f%b7/) TCP/IPでは宛先IP、宛先ポート番号、送信元IP、送信元ポート番号の4つの要素の組み合わせで通信を区別します(ソケット)。今考えている環境ではブロードバンドルーター自体と複数のPCが(インターネットへの通信に関して)同じIPアドレスを共有しているのでポート番号でしか区別できなくなっています。なので、ポート番号は(インターネットに出るときには)かならず重複しないようにしなくてはいけないわけです。 このようにポート番号まで書き換えるNATのことをNAPTといいます。 ここまで理解できれば、ブロードバンドルーター上でNATを行ったときに管理表が必須になることがわかると思います。どのパケットをどのように変換すればいいのか、という管理表です。俗にNATテーブルと呼ばれます。 NATテーブルをまで意識しながら通信の流れを見てみましょう。 プライベートIPからグローバルIPへの変換 グローバルIPからプライベートIPへの変換(戻りパケット) どうでしょうか?このようにNATの変換表に、IPとポート番号の情報まで盛り込むことで、1つのグローバルIPのみを用いて複数の端末がプライベートLANからインターネットにまでアクセスできるようになりました。 この際、NATでポート番号まで管理、変換していますのでNAPT(Network Address Port Translation)と呼ばれます。ちなみに、「IPマスカレード」という単語で呼ばれることもありますが、これはLinuxにおけるNAPTの実装の名前が「IPマスカレード」であったために、このように呼ばれるそうです。Linux上の実装は今現在はiptablesに変わっていますので、技術の名称と実装の名称は区別して呼んだ方がよい個人的には思います。 さて、これで一応NAT関連の基礎的な部分は解説を終えたことになります。ここまで理解できればあとはバリエーションの問題ですので、考えれば思いつけるようになると思います。 NATの説明の中ではレイヤ3、レイヤ4にのみ注目しましたが、それぞれレイヤ2レベルでのやり取りも説明できる状態にしておくのが重要だと思います。上記の図にレイヤ2レベルの情報を書き込めるでしょうか?難しければ以下のエントリを再度読んでみてからトライしてみてください。 - [レイヤ2 –データリンク層- 宛先はMACアドレス](https://windowsadmin.ebisuda.net/2009/02/12/%e3%83%ac%e3%82%a4%e3%83%a42-%e3%83%87%e3%83%bc%e3%82%bf%e3%83%aa%e3%83%b3%e3%82%af%e5%b1%a4-%e5%ae%9b%e5%85%88%e3%81%afmac%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9/)

February 9, 2011 · 1 min · 胡田昌彦

1対1 NAT

今回は前回に引き続いてNATについての話です。前回の記事を読まれていない方は先によんでおいていただくことをお勧めします。 - [NAT(Network Address Translation)の基本 | WindowsServer管理者への道](https://windowsadmin.ebisuda.net/2011/01/12/natnetwork-address-translation%e3%81%ae%e5%9f%ba%e6%9c%ac/) ここまではTCPのポート番号には注目しませんでした。今回はTCPのポート番号まで意識して動きを見ていきます。 NAT 以下は前回のおさらいです。IPアドレスにだけ注目して以下のような変換が行われることを説明しました。 ここにポート番号も書き加えてみます。本当は様々なバリエーションがあるのですが、以下ではNATが書き換えるのはIPアドレスのみとします。 単純にTCPのポート番号を書き加えただけですが、大丈夫でしょうか。PC1から見た宛先サーバーのポート番号はWEBサーバーですので80番となり、ソースポートに関しては、ランダムに選ばれますが、ここでは1024番としてあります。WEBサーバーからの戻りのパケットはソースとデスティネーションのポート番号が入れ替わっています。 複数台のNAT それでは、ここでさらにPCがもう一台ある環境を考えてみましょう。 PC1とPC2が同じブロードバンドルーターの下にある状況です。 TCPでは送信元ポートはランダムに選ばれます。なので「PC1とPC2が同じサーバー(宛先IP)の同じサービス(宛先ポート番号)に同じ送信元番号をつかって接続する」ということは普通に起こりうることです。同一LAN内であればこれは以下のように区別することが可能です。 - 宛先IP:宛先ポート番号 - PC1のIP:送信元ポート番号 - 宛先IP:宛先ポート番号 - PC2のIP:送信元ポート番号 PC1のIPとPC2のIPが異なるので当たり前に区別できるのですが、これが上記の図の中で、同じWEBサーバーに対して接続をしようとし、その時の送信元ポート番号がたまたま同一で、さらにそのパケットがNATされた時にはどうなるでしょうか? 変換前パケットには送信元IPしか違いがなかったのに、それをどちらもGlobal IP Aに変換してしまっては区別がつかなくなってしまいます。これでは通信が混ざっていしまい、うまくいきません。 これを解決するにはどうしたらいいでしょうか。色々やり方はありますが、TCPポートは書き換えずに実現可能な方法を考えてみて下さい。 ・・・・・・。 ・・・・・・。 ・・・・・・。 思いついたでしょうか。正解は「ブロードバンドルータにPC1、PC2に対応するグローバルIPをそれぞれ割り当てる」ということです。以下のように、グローバルIPとプライベートIPの対応を作ってしまう訳です。 プライベートIP グローバルIP 192.168.1.1 Global IP A 192.168.1.2 Global IP C こうする事でインターネットとプライベートネットワークとで相互に通信出来ます。 1対1 NAT この様にグローバルとプライベートのIPを1対1で対応付けするNATを1対1NATと呼びます。 注目すべきは、プライベートネットワーク(PC1, PC2が存在するプライベートIPをつかった192.168.1.0/24のネットワーク)からインターネットへの通信のみならず、インターネットからプライベートネットワークへの通信もきちんと対応付ける事が可能な事です。(実際に通信させるかどうかは別問題ですが、「対応づけを矛盾なく行うことができる」ということです。) そして、グローバルIPアドレスが沢山必要になってしまう事も特徴です。 このNATはインターネット上に複数(WEB、MAIL等々)のサービスを提供するサーバーの公開の時に使われる事が多いです。グローバルIPアドレスが沢山必要になるので、一般家庭ではめったに使われない形態ではあります。 今回は1番シンプルなNATロジックである1対1NATを説明しました。次回以降はTCPのポート番号まで書き換える形態のNATを説明しようと思います。お楽しみに!

January 19, 2011 · 1 min · 胡田昌彦

NAT(Network Address Translation)の基本

今回はNAT(Network Address Translation)について書きます。NATはほとんどのネットワークで、もっと正確にいえばネットワークの接続部分に使われているとても重要なものです。一番身近なところでは、自宅のPCのIPアドレスはプライベートIPアドレスなのに、インターネットの世界に接続できている、さらに言うと複数のPCが同時にインターネットに接続できているという方が多いのではないでしょうか。こんなことができるのはNATのおかげなんです。 NATを理解するにはIPアドレスとTCPのポート番号の理解が必ず必要ですので、まだこのあたりの理解が怪しい場合には先に以下のエントリを参照してもらえればと思います。 - レイヤ3 -ネットワーク層- IPアドレス - レイヤ4 -トランスポート層- ポート番号 NATは何をするものか NATはその名の通りアドレスを変換するものです。具体的にはパケット内のIPアドレスやTCPのポート番号を書き換えます。その書き換えパターンによって様々なバリエーションがあり、呼び方や目的が変わってきます(一部同じものもありますが)。よく耳にするのは以下のようなものです。 - 1対1NAT - NAPT(Network Address Port Translation) - IPマスカレード(IP masquerade) - DNAT(Destination NAT) - SNAT(Source NAT) それでは具体的な利用シーンを想定しながら動きを見て行きましょう。 (NAT無し)自宅PCからインターネットにアクセスする まずは理解を容易にするためにNATを使用しない状態から解説します。以下のような接続を考えます。 - PCがグローバルIPを持っている - PCからゲートウェイまで直接通信する これでなんの問題もなく世界中と通信出来る訳ですが、同時に世界中の誰からも自由にアクセスされる状態にもなっている事がポイントです。NATを考える時には「どこにアクセス出来るか」に加えて「どこからアクセスされるか」が重要になってきます。 因みに、本当にこのように「PCを直接インターネットに接続する」のは非常に危険なので行わないようにして下さい。恐らく数分で攻撃される事になります。 ブロードバンドルータ経由でインターネットに接続する 次に一般家庭でよくあるように、まずブロードバンドルータがインターネットに接続し、その下にPCを接続する構成を考えます。 また、説明のために、インターネットの向こう側にWEBサーバーがある場合を考えてみます。 - PCはプライベートIPを持っている - PCはデフォルトゲートウェイとしてブロードバンドルータを利用する - ブロードバンドルータはグローバルIPを持っている この接続は一般的なもので、PCからインターネットに接続する事ができます。 「プライベートIPはインターネット上では使用できない」ということを知っていれば、「なぜプライベートIPしか持っていないPCがインターネットにアクセスできているのか?」という疑問が出てきます。ここでNATが使われているのです。 簡単にいうと、「PCがインターネットにアクセスしようとする時に、ブロードバンドルータからのアクセスという事にする」ことでアクセスできるようにしています。 この時の動きをIPアドレスに注目してパケットレベルで詳しく見てみましょう。 まず、PCからWEBサーバーに接続要求が出されます。送信元IPアドレスは192.168.1.1, 宛先IPアドレスはGlobalIP Bになります。 このパケットはまず、デフォルトゲートウェイであるブロードバンドルーターに届けられます。ブロードバンドルーターはそのままルーティングするのではなく、送信元IPアドレスを自分自身のグローバルIPに変換して送信します。宛先IPアドレスはGlobal IP Bのまま、送信元IPアドレスはGlobal IP Aになります。 この時、パケット内のIPアドレスが書き換えられています。これこそがNATです。通常のルーターであれば、IPアドレス部分は参照するのみで書き換えることはしません。NATはIPアドレス部分を書き換える(※TCPポート番号まで書き換えるタイプのNATもあります)ここがポイントです。 それでは続きを見てみましょう。 パケットは途中いくつものルーターを経由して、WEBサーバーにまでパケットが届きます。この時WEBサーバーにしてみると、通信をしてきたのは単にブロードバンドルーターであるように見えます。PCの存在はWEBサーバーにはまったくわかりません(わかる必要もありません)。ここも1つのポイントです。NATが行われる場合実際の送信元、送信先とパケット上の送信元、送信先が異なることが多いです(NATの種類にもよります)。 ...

January 12, 2011 · 1 min · 胡田昌彦