Azure環境へのPoint to Site接続(P2S接続)とプロキシ経由でのインターネット接続の動作を確認したかったため、環境を構築し動作確認をしたので、備忘として残しておきます。
スクショとかをしっかり取れていないのと難しいことはあまりしていないため、具体的な設定手順等は省略します。
環境構成
以下のやりたいことに合わせて環境を構成しました。ルーティングはUDRで設定しています。
- Point to Site接続(P2S)
- ハブアンドスポーク構成での動作確認(VPN-Gatewayの仮想ネットワークにもFirewallを構成するため、実際はマルチハブアンドスポークの確認が正しい気のかも※)
- プロキシサーバ経由でのインターネット接続
- Azure Firewallと静的ルーティングを利用したVnet間のルーティング確認
※マルチハブアンドスポークについてのAzure公式ドキュメントはこちらが参考になるかと思います。
Spoke-Vnet-aとSpoke-Vnet-bで通信を実施する場合、Vnet-Peeringでゲートウェイの利用を設定して通信させることも可能ですが、HUB-VnetにもGatewayが存在している場合の制約でVnet-Peeringへの設定ができない場合を想定しての構成としています。(制約とか構成の正解が分からなくて難しい。)
HUB-Vnet-Aの構成
セグメント
アドレス空間 | 10.0.0.0/16 |
Firewall-Subnet | 10.0.1.0/26 |
Gateway-Subnet | 10.0.2.0/24 |
ルーティング
サブネット | 宛先 | ネクストホップ |
Firewall-Subnet | VPN-Gatewayでクライアント端末へ払い出すアドレスプール | Spoke-Vnet-bのFirewall |
Spoke-Vnet-aの構成
セグメント
アドレス空間 | 10.1.0.0/16 |
Firewall-Subnet | 10.1.1.0/26 |
Gateway-Subnet | 10.1.2.0/24 |
ルーティング
サブネット | 宛先 | ネクストホップ |
Firewall-Subnet | 0.0.0.0/0 | HUB-Vnet-AのFirewall |
Gateway-Subnet | 0.0.0.0/0 | Spoke-Vnet-aのFirewall |
Spoke-Vnet-bの構成
セグメント
アドレス空間 | 10.2.0.0/16 |
Subnet-b | 10.2.0.0/24 |
ルーティング
サブネット | 宛先 | ネクストホップ |
Subnet-b | 0.0.0.0/0 | インターネット |
Subnet-b | VPN-Gatewayでクライアント端末へ払い出すアドレスプール | HUB-Vnet-AのFirewall |
構成要素について
Azure Firewall
Azure Firewallは、Vnet間でルーティングを行うための要素として利用します。
そのため、Firewallのポリシーとしてはすべての通信を許可する設定を実施します。
VPN-Gateway
仮想ネットワークゲートウェイでVPN接続を実施します。
個人の検証であればSKUは「VpnGw1」で十分です。ゲートウェイのSKUについてのAzure公式ドキュメントは以下になります。
Point to Site(P2S)接続の際の公開する追加ルートについてですが、設定するとVPN接続した端末に設定したルートの情報がVPNトンネルをネクストホップとして載ってくるようになります。
そのため、今回のようにプロキシサーバ経由でのインターネット接続を実施する場合は、VPN接続した端末のルーティングが全てVPNトンネルを向くように公開する追加ルートに設定するのが良いかと思いますが、環境によるかなと思います。
全て通信をVPNトンネルに向ける場合の設定値は、「0.0.0.0/1 , 128.0.0.0/1」です。
アドバタイズルートの設定についての公式ドキュメントのページは以下になります。
プロキシサーバ
プロキシサーバは、仮想マシンにSquidをインストールして構築しています。
ほぼインストール時のデフォルト状態で利用しており、特別な設定等は実施していません。
/etc/squid/squid.confの内容は以下になります。
[hogehoge@Proxy ~]$ sudo cat /etc/squid/squid.conf
#
# Recommended minimum configuration:
#
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost
# And finally deny all other access to this proxy
#http_access deny all
http_access allow all
# Squid normally listens to port 3128
http_port 3128
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
logformat timefm %{%Y/%m/%d %H:%M:%S}tl %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
access_log daemon:/var/log/squid/access.log timefm
#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
サーバでの確認事項としては、今回はgoogleの公開DNS(8.8.8.8)への疎通確認とcurlコマンドでの確認をしていました。
[hogehoge@Proxy ~]$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.77 ms
^C
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.769/1.769/1.769/0.000 ms
[hogehoge@Proxy ~]$ curl www.google.com --head
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
Content-Security-Policy-Report-Only: object-src 'none';base-uri 'self';script-src 'nonce-IbiUJPYgcb_4SDn9uAO1IQ' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Sat, 16 Nov 2024 19:17:07 GMT
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
Expires: Sat, 16 Nov 2024 19:17:07 GMT
Cache-Control: private
Set-Cookie: AEC=AZ6Zc-V5hE6hcwi2t-_I-zOnGE-Rglgn6uzVm_EvLOjWZ1_N8Ov6zx7xQRk; expires=Thu, 15-May-2025 19:17:07 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax
Set-Cookie: NID=519=mrLoYxDFN88-Eq7GkmEwzWtqKByOxCerEswRTl7N4uQ9xRiUVP34OEq29iPut56lwCszs-J86kFd6itJ4sCC7mV5xQNSC-W-BxLqdaOa_-jowJTj0x2zjDhLeV32la5Ifs_NkenAnk_yWgjW9ZE71ZUbCymlB3PrPDqndNbzkKPkBQDwO0H0LFCTOhHt9SiD; expires=Sun, 18-May-2025 19:17:07 GMT; path=/; domain=.google.com; HttpOnly
リモート環境のクライアント端末
Point to Site(P2S)接続を実施する端末に必要な設定としては、「VPNクライアントのインストール」「VPN接続用の証明書のインストール」「プロキシサーバの利用設定」です。
VPNクライアントのインストールは、VPN-Gatewayのポイント対サイト設定からVPNクライアントをダウンロード可能なので、そこからダウンロードしてインストールを実施すればOKです。※公開する追加ルートの設定を変更したら、再度ダウンロード・インストールが必要になります。
証明書のインストールは、個人の検証レベルであれば「自己署名ルート証明書を作成⇒ルート証明書からクライアント証明書を作成⇒端末にインストール」で問題ありません。
最期にプロキシサーバの設定ですが、こちらはVPN接続に対してプロキシサーバの利用設定を実施する必要があります。
ネットワークとインターネットから「インターネットオプション」を選択します。
「インターネットのプロパティ」から「接続」タブを選択して、「ダイヤルアップと仮想プライベートネットワークの設定」の項目に表示されているVPN接続を選択して、「設定」をクリックします。
「プロキシサーバ」の項目で、プロキシサーバを使用するにチェックを入れて、アドレスとポートを入力すれば完了です。
インターネットへの接続とプロキシログの確認
構築と設定が完了したら、クライアント端末でインターネットへ接続し、プロキシのログを確認し、クライアント端末がプロキシ経由でインターネットへ接続できていることを確認します。
もしVPN-Gatewayの設定でアドバタイズルートですべての通信をVPNトンネルに向けている場合、VPNに接続している状態でインターネットへの接続はできないはずです。
そのため、VPNに接続している状態でインターネットへ接続できない状態からプロキシ等の設定を実施してインターネットに接続できることを確認できれば問題ないかと思います。
squidのログで、VPN接続のアドレスプール(172.16.0.0系)からのアクセスを確認してOKなことを確認します。
[hogehoge@Proxy ~]$ sudo cat /var/log/squid/access.log
2024/11/16 19:39:33 1731785973.511 915 172.16.16.2 TCP_TUNNEL/200 2940 CONNECT www.netflix.com:443 - HIER_DIRECT/3.12.3.40 -
2024/11/16 19:39:35 1731785975.195 719 172.16.16.2 TCP_TUNNEL_ABORTED/200 6443 CONNECT kinesis.us-east-1.amazonaws.com:443 - HIER_DIRECT/3.91.171.225 -
2024/11/16 19:39:37 1731785977.638 3549 172.16.16.2 TCP_TUNNEL/200 74972 CONNECT assets.nflxext.com:443 - HIER_DIRECT/45.57.91.1 -
2024/11/16 19:39:37 1731785977.651 2609 172.16.16.2 TCP_TUNNEL/200 893 CONNECT assets.nflxext.com:443 - HIER_DIRECT/45.57.91.1 -
2024/11/16 19:39:37 1731785977.756 123 172.16.16.2 NONE/503 0 CONNECT notifications.netflix.com:443 - HIER_NONE/- -
2024/11/16 19:39:38 1731785978.557 756 172.16.16.2 TCP_TUNNEL/200 861 CONNECT assets.nflxext.com:443 - HIER_DIRECT/45.57.91.1 -
2024/11/16 19:39:38 1731785978.574 3533 172.16.16.2 TCP_TUNNEL/200 3488 CONNECT assets.nflxext.com:443 - HIER_DIRECT/45.57.91.1 -
2024/11/16 19:39:38 1731785978.615 4440 172.16.16.2 TCP_TUNNEL/200 772616 CONNECT assets.nflxext.com:443 - HIER_DIRECT/45.57.91.1 -
2024/11/16 19:39:39 1731785979.392 4389 172.16.16.2 TCP_TUNNEL/200 2093116 CONNECT assets.nflxext.com:443 - HIER_DIRECT/45.57.91.1 -
2024/11/16 19:39:39 1731785979.680 1051 172.16.16.2 TCP_TUNNEL/200 77686 CONNECT assets.nflxext.com:443 - HIER_DIRECT/45.57.91.1 -
2024/11/16 19:39:39 1731785979.953 550 172.16.16.2 TCP_TUNNEL/200 4812 CONNECT logs.netflix.com:443 - HIER_DIRECT/3.132.37.209 -
2024/11/16 19:39:39 1731785979.953 1368 172.16.16.2 TCP_TUNNEL/200 5117 CONNECT logs.netflix.com:443 - HIER_DIRECT/3.132.37.209 -
2024/11/16 19:39:40 1731785980.221 726 172.16.16.2 TCP_TUNNEL_ABORTED/200 6443 CONNECT kinesis.us-east-1.amazonaws.com:443 - HIER_DIRECT/3.91.171.225 -
2024/11/16 19:39:40 1731785980.237 5195 172.16.16.2 TCP_TUNNEL/200 52847 CONNECT occ-0-3011-116.1.nflxso.net:443 - HIER_DIRECT/190.98.156.219 -
2024/11/16 19:39:40 1731785980.409 160 172.16.16.2 TCP_TUNNEL/200 6383 CONNECT ae.nflximg.net:443 - HIER_DIRECT/184.26.212.122 -
2024/11/16 19:39:40 1731785980.413 5371 172.16.16.2 TCP_TUNNEL/200 167113 CONNECT occ-0-3011-116.1.nflxso.net:443 - HIER_DIRECT/190.98.156.219 -
2024/11/16 19:39:40 1731785980.468 44 172.16.16.2 TCP_TUNNEL/200 5124 CONNECT ae.nflximg.net:443 - HIER_DIRECT/184.26.212.122 -
2024/11/16 19:39:40 1731785980.934 28507 172.16.16.2 TCP_TUNNEL/200 5256 CONNECT accounts.google.com:443 - HIER_DIRECT/74.125.204.84 -
2024/11/16 19:39:40 1731785980.934 15374 172.16.16.2 TCP_TUNNEL/200 8785 CONNECT play.google.com:443 - HIER_DIRECT/172.217.175.238 -
2024/11/16 19:39:40 1731785980.934 153772 172.16.16.2 TCP_TUNNEL/200 7584 CONNECT accountcapabilities-pa.googleapis.com:443 - HIER_DIRECT/142.251.222.10 -
2024/11/16 19:39:40 1731785980.934 389824 172.16.16.2 TCP_TUNNEL/200 1586641 CONNECT www.google.com:443 - HIER_DIRECT/142.250.207.36 -
2024/11/16 19:39:40 1731785980.934 388435 172.16.16.2 TCP_TUNNEL/200 48915 CONNECT play.google.com:443 - HIER_DIRECT/172.217.175.78 -
2024/11/16 19:39:40 1731785980.934 16378 172.16.16.2 TCP_TUNNEL/200 12455 CONNECT ogads-pa.clients6.google.com:443 - HIER_DIRECT/142.250.207.10 -
2024/11/16 19:39:40 1731785980.934 5821 172.16.16.2 TCP_TUNNEL/200 4406 CONNECT geolocation.onetrust.com:443 - HIER_DIRECT/172.64.155.119 -
2024/11/16 19:39:40 1731785980.935 7864 172.16.16.2 TCP_TUNNEL/200 155950 CONNECT www.netflix.com:443 - HIER_DIRECT/3.12.3.40 -
2024/11/16 19:39:40 1731785980.935 2360 172.16.16.2 TCP_TUNNEL/200 5794 CONNECT web.prod.cloud.netflix.com:443 - HIER_DIRECT/3.131.250.78 -
2024/11/16 19:39:40 1731785980.935 16187 172.16.16.2 TCP_TUNNEL/200 13007 CONNECT ogads-pa.clients6.google.com:443 - HIER_DIRECT/142.250.207.10 -
2024/11/16 19:39:40 1731785980.935 393671 172.16.16.2 TCP_TUNNEL/200 8969 CONNECT www.googleapis.com:443 - HIER_DIRECT/142.250.196.138 -
2024/11/16 19:39:40 1731785980.935 15255 172.16.16.2 TCP_TUNNEL/200 9562 CONNECT play.google.com:443 - HIER_DIRECT/172.217.175.238 -
2024/11/16 19:39:40 1731785980.935 5900 172.16.16.2 TCP_TUNNEL/200 6126 CONNECT cdn.cookielaw.org:443 - HIER_DIRECT/104.18.86.42 -
2024/11/16 19:39:40 1731785980.935 87984 172.16.16.2 TCP_TUNNEL/200 4000 CONNECT waa-pa.clients6.google.com:443 - HIER_DIRECT/172.217.161.74 -
2024/11/16 19:39:40 1731785980.935 210256 172.16.16.2 TCP_TUNNEL/200 10556 CONNECT android.clients.google.com:443 - HIER_DIRECT/172.217.175.110 -
2024/11/16 19:39:40 1731785980.935 386484 172.16.16.2 TCP_TUNNEL/200 7872 CONNECT beacons3.gvt2.com:443 - HIER_DIRECT/142.250.207.35 -
2024/11/16 19:39:40 1731785980.935 512 172.16.16.2 TCP_TUNNEL/200 4703 CONNECT www.netflix.com:443 - HIER_DIRECT/3.12.3.40 -
2024/11/16 19:39:40 1731785980.935 3305 172.16.16.2 TCP_TUNNEL/200 21667 CONNECT www.gstatic.com:443 - HIER_DIRECT/172.217.175.35 -
2024/11/16 19:39:40 1731785980.935 393579 172.16.16.2 TCP_TUNNEL/200 7821 CONNECT beacons5.gvt2.com:443 - HIER_DIRECT/216.239.32.116 -
2024/11/16 19:39:40 1731785980.935 3286 172.16.16.2 TCP_TUNNEL/200 5413 CONNECT web.prod.cloud.netflix.com:443 - HIER_DIRECT/3.131.250.78 -
2024/11/16 19:39:40 1731785980.935 19422 172.16.16.2 TCP_TUNNEL/200 9506 CONNECT google.com:443 - HIER_DIRECT/142.251.222.14 -
2024/11/16 19:39:40 1731785980.935 3273 172.16.16.2 TCP_TUNNEL/200 7254 CONNECT content-autofill.googleapis.com:443 - HIER_DIRECT/142.251.42.170 -
2024/11/16 19:39:40 1731785980.935 2299 172.16.16.2 TCP_TUNNEL/200 4856 CONNECT aidsvc.netflix.com:443 - HIER_DIRECT/3.12.3.40 -
2024/11/16 19:39:40 1731785980.935 390398 172.16.16.2 TCP_TUNNEL/200 8221 CONNECT beacons4.gvt2.com:443 - HIER_DIRECT/216.239.32.116 -
2024/11/16 19:39:40 1731785980.935 7869 172.16.16.2 TCP_TUNNEL/200 12761 CONNECT optimizationguide-pa.googleapis.com:443 - HIER_DIRECT/142.250.196.106 -
2024/11/16 19:39:40 1731785980.935 6843 172.16.16.2 TCP_TUNNEL/200 14761 CONNECT cdn.cookielaw.org:443 - HIER_DIRECT/104.18.86.42 -
2024/11/16 19:39:40 1731785980.935 12365 172.16.16.2 TCP_TUNNEL/200 28278 CONNECT ogs.google.com:443 - HIER_DIRECT/172.217.31.142 -
2024/11/16 19:39:40 1731785980.935 3303 172.16.16.2 TCP_TUNNEL/200 4939 CONNECT assets.netflix.com:443 - HIER_DIRECT/3.211.157.115 -
2024/11/16 19:39:40 1731785980.935 1236 172.16.16.2 TCP_TUNNEL/200 5264 CONNECT aidsvc.netflix.com:443 - HIER_DIRECT/3.12.3.40 -
Chat GPTに上記のログを分析してもらった結果も載せておきます。
プロキシログの解析(Chat GPTを利用)
ログを解析し、以下の点を整理しました:
1. 主な通信先
- Netflix関連:
- ドメイン:
www.netflix.com
,assets.nflxext.com
,aidsvc.netflix.com
,web.prod.cloud.netflix.com
など。 - 通信が成功したものがほとんどですが、一部(
notifications.netflix.com
)でNONE/503
のエラーが発生。
- ドメイン:
- Google関連:
- ドメイン:
accounts.google.com
,play.google.com
,www.google.com
,ogs.google.com
など、多数のGoogleサービスへの通信。 - すべて
TCP_TUNNEL/200
で成功。
- ドメイン:
- Amazon関連:
- ドメイン:
kinesis.us-east-1.amazonaws.com
。 TCP_TUNNEL_ABORTED/200
が2回発生しており、通信が途中で中断。
- ドメイン:
- その他:
geolocation.onetrust.com
,cdn.cookielaw.org
など。
2. 通信のステータス
- 成功 (
TCP_TUNNEL/200
):- 圧倒的多数の通信は成功している。
- 通信成功例:yamlコードをコピーする
2024/11/16 19:39:33 1731785973.511 172.16.16.2 TCP_TUNNEL/200 2940 CONNECT www.netflix.com:443
- エラー (
NONE/503
):- Netflixの
notifications.netflix.com
で発生。sqlコードをコピーする2024/11/16 19:39:37 1731785977.756 172.16.16.2 NONE/503 0 CONNECT notifications.netflix.com:443
- Netflixの
- 中断 (
TCP_TUNNEL_ABORTED/200
):- Amazon Kinesisとの通信で発生。yamlコードをコピーする
2024/11/16 19:39:35 1731785975.195 172.16.16.2 TCP_TUNNEL_ABORTED/200 6443 CONNECT kinesis.us-east-1.amazonaws.com:443
- Amazon Kinesisとの通信で発生。yamlコードをコピーする
3. 通信量 (データ量)
- 最大通信量:
2093116 bytes
: Netflixのassets.nflxext.com
。sqlコードをコピーする2024/11/16 19:39:39 1731785979.392 172.16.16.2 TCP_TUNNEL/200 2093116 CONNECT assets.nflxext.com:443
- 最小通信量:
0 bytes
: Netflixのnotifications.netflix.com
(エラー)。sqlコードをコピーする2024/11/16 19:39:37 1731785977.756 172.16.16.2 NONE/503 0 CONNECT notifications.netflix.com:443
4. IPアドレスとホスト
- クライアントIP:
- 全て
172.16.16.2
。
- 全て
- 通信先IP:
- 各ドメインの接続先IPが細かく分かれている。
- 例:
3.12.3.40
(www.netflix.com
)45.57.91.1
(assets.nflxext.com
)
まとめ
通信量が多いリクエストはNetflixの静的資産(assets.nflxext.com
)に集中している。
クライアントは主にNetflixとGoogle関連のサービスに接続を試みている。
Netflix関連のエラー(notifications.netflix.com
)やAmazon Kinesisの中断が確認されるが、全体的には通信は正常。
VPNに接続している端末としては、プロキシを経由してインターネットへ通信するため、直接インターネットへ出ようとする通信は失敗します。(VPNに接続していてすべての通信をVPNトンネルに向けている場合、ping 8.8.8.8を打っても失敗することを意味します。)
そのため、クライアント端末としてはプロキシサーバとの通信が成功していることを確認できればOKになります。
コメント