pacファイルをIISに配置して特定URL通信をプロキシ経由にする

pacファイルをIISに配置し、そのpacファイルを利用することで、特定URL向け通信をプロキシ経由にする構成を試してみました。

広告

構成図

以下のように構成して、bonjiri-blog.com 向けの通信だけプロキシ経由となるようにします。

bonjiri-blog.com 向けの通信だけプロキシ経由となるように構成

準備

まず、AzureのVMやそれを構築するために必要なリソースをAzureCLIで作成します。

#任意のパラメータを定義
$rg_name = "RG-Test-pac"
$location = "japaneast"
$vnet_name = "Vnet-Test-pac"
$vnet_address = "10.12.0.0/24"
$subnet1_name = "Subnet-Client"
$subnet1_address = "10.12.0.0/26"
$subnet2_name = "Subnet-Proxy"
$subnet2_address = "10.12.0.64/26"
$nsg1_name = "NSG-Test-Client"
$nsg2_name = "NSG-Test-Proxy"
$nsgrule1_name = "AllowRDP"
$nsgrule1_name = "AllowSSH"
$my_gip =  (Invoke-WebRequest https://ipinfo.io/ip).content
$nsgrule_sourceip = $my_gip + "/32"
$nsgrule1_port = 3389
$nsgrule1_priority = 200
$nsgrule2_port = 22
$nsgrule2_priority = 200
$pip1_name = "PIP-VM-Test-Client"
$nic1_name = "NIC-VM-Test-Client"
$pip2_name = "PIP-VM-Test-Proxy"
$nic2_name = "NIC-VM-Test-Proxy"
$vm1_name = "VM-Test-Client"
$vm2_name = "VM-Test-Proxy"
$vm1_image = "Win2022Datacenter"
$vm2_image = "Ubuntu2204"
$vm_size = "Standard_B2ms"
$vm_authtype = "password"
$vm_adminname = "xxxxxxxxxxx"

#リソースグループの作成
az group create `
 -l $location `
 -g $rg_name

#仮想ネットワークの作成とクライアント用サブネットの追加
az network vnet create `
 -n $vnet_name `
 -g $rg_name `
 -l $location `
 --address-prefix $vnet_address `
 --subnet-name $subnet1_name `
 --subnet-prefix $subnet1_address

#web用サブネットの追加
az network vnet subnet create `
 -g $rg_name `
 --vnet-name $vnet_name `
 -n $subnet2_name `
 --address-prefixes $subnet2_address

#NSGの作成
az network nsg create `
 -n $nsg1_name `
 -g $rg_name

az network nsg create `
 -n $nsg2_name `
 -g $rg_name

#NSGのルール追加
az network nsg rule create `
 -g $rg_name `
 --nsg-name $nsg1_name `
 -n $nsgrule1_name `
 --source-address-prefixes $nsgrule_sourceip `
 --destination-port-range $nsgrule1_port `
 --priority $nsgrule1_priority

az network nsg rule create `
 -g $rg_name `
 --nsg-name $nsg2_name `
 -n $nsgrule2_name `
 --source-address-prefixes $nsgrule_sourceip `
 --destination-port-range $nsgrule2_port `
 --priority $nsgrule2_priority

#NSGをサブネットに適用
az network vnet subnet update `
 -g $rg_name `
 -n $subnet1_name `
 --vnet-name $vnet_name `
 --network-security-group $nsg1_name

az network vnet subnet update `
 -g $rg_name `
 -n $subnet2_name `
 --vnet-name $vnet_name `
 --network-security-group $nsg2_name

#パブリックIPの作成
az network public-ip create `
 -n $pip1_name `
 -g $rg_name

az network public-ip create `
 -n $pip2_name `
 -g $rg_name

#ネットワークインターフェースの作成
az network nic create `
 -n $nic1_name `
 -g $rg_name `
 --vnet-name $vnet_name `
 --subnet $subnet1_name `
 --public-ip-address $pip1_name

az network nic create `
 -n $nic2_name `
 -g $rg_name `
 --vnet-name $vnet_name `
 --subnet $subnet2_name `
 --public-ip-address $pip2_name

#仮想マシンの作成
az vm create `
 -n $vm1_name `
 -g $rg_name `
 --image $vm1_image `
 --size $vm_size `
 --nics $nic1_name `
 --authentication-type $vm_authtype `
 --admin-username $vm_adminname

az vm create `
 -n $vm2_name `
 -g $rg_name `
 --image $vm2_image `
 --size $vm_size `
 --nics $nic2_name `
 --authentication-type $vm_authtype `
 --admin-username $vm_adminname

上記作成後、クライアントVMとpacファイル配信用VMのグローバルIPを調べてみます。

PS C:\> $pip1_address = az network public-ip show -g $rg_name -n $pip1_name | ConvertFrom-Json
PS C:\> $pip1_address.ipAddress
74.176.50.81
PS C:\>
PS C:\> $pip2_address = az network public-ip show -g $rg_name -n $pip2_name | ConvertFrom-Json
PS C:\> $pip2_address.ipAddress
74.176.50.120

クライアントVM:74.176.50.81
pacファイル配信用VM:74.176.50.120

であることが分かりました。

1.プロキシVMの構成

以下の記事を参考にして構成します。

Azure上にプロキシサーバーを構築してみた
Azureの仮想マシンでプロキシサーバーを構築してみました。今回は Ubuntu 18.04 と squid を利用して構築しました。 Azure仮想マシンの作成 Azure CLIを利用して作成します。以下の記事で仮想マシンに必要となるリ...

2.クライアントVMの構成

pacファイルを作成

以下のようにpacファイルを作成します。

function FindProxyForURL(url, host)
{
  if(shExpMatch(host,"bonjiri-blog.com")
      || shExpMatch(host,"ipinfo.io") 
  )
  { 
    return "PROXY 10.12.0.68:8080"; 
  }
  else 
    return "DIRECT";
}

IISをインストール

まずIISをインストールします。

Install-WindowsFeature -Name Web-Server -IncludeManagementTools

pacファイルを配置する

wwwrootフォルダ配下に上記で作成した proxy.pac を置きます。

wwwrootフォルダ配下にパックファイルを配置

MIME type(MIMEの種類)に.pacを追加

IISマネージャの設定でMIME typeに.pacを追加します。

MIMEの種類に.pac拡張子を追加

デフォルト設定ではMIME typeに.pacの拡張子がないため、これを設定せずにproxy.pacにアクセスするとエラーとなります。

MIMEの種類が設定されていないとエラーとなる

ネットワーク設定でpacファイルを指定

設定>ネットワークとインターネット>プロキシ からproxy.pacを指定します。

ネットワーク設定でpacファイルを指定

これでクライアントVM側の設定も完了です

3.アクセス確認

実際にpacファイルによって特定のURL通信がプロキシ経由になるかを確かめます。

bonjiri-blog.comへのアクセス

以下の記事で自分の送信元グローバルIPが分かるので、アクセスしてみます。

pacファイルに記載したURLなので、プロキシVMのグローバルIP(74.176.50.120)が表示されるはずです。

想定通り、プロキシVMのグローバルIP(74.176.50.120)が表示されました。

bonjiri-blog.comへのアクセス結果

また、プロキシのログを確認してみても通信はプロキシを経由していることが分かります。

xxxxxxxx@VM-Test-Proxy:~$ sudo cat /var/log/squid/access.log | grep bonjiri | tail -n 10
2024/11/23 12:53:59 1732366439.041 188389 10.12.0.4 TCP_TUNNEL/200 1301732 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
2024/11/23 12:54:34 1732366474.313   6346 10.12.0.4 TCP_TUNNEL/200 451395 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
2024/11/23 12:54:34 1732366474.316   6311 10.12.0.4 TCP_TUNNEL/200 434 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
2024/11/23 12:58:01 1732366681.386     23 10.12.0.4 TCP_TUNNEL/200 3199 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
2024/11/23 12:59:04 1732366744.292   5990 10.12.0.4 TCP_TUNNEL/200 427375 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
2024/11/23 13:01:29 1732366889.301 207950 10.12.0.4 TCP_TUNNEL/200 818263 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
2024/11/23 13:05:03 1732367103.375 347100 10.12.0.4 TCP_TUNNEL/200 852762 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
2024/11/23 13:07:17 1732367237.455  23119 10.12.0.4 TCP_TUNNEL/200 445132 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
2024/11/23 13:08:55 1732367335.971 180031 10.12.0.4 TCP_TUNNEL/200 497 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
2024/11/23 13:09:15 1732367355.006  30004 10.12.0.4 TCP_TUNNEL/200 423393 CONNECT bonjiri-blog.com:443 - HIER_DIRECT/103.3.2.10 -
xxxxxxxx@VM-Test-Proxy:~$

www.cman.jpへのアクセス

このサイトも送信元グローバルIPアドレスが分かるサイトです。

今回pacファイル内で定義していないため、クライアントVMのグローバルIP(74.176.50.81)が表示されるはずです。

アクセス情報【使用中のIPアドレス確認】
あなたのアクセスしているIPアドレス情報などをENVとJavaScriptで取得し表示します。あなたのIPアドレスからポート疎通・ping疎通・DNS索引・WHOIS情報も取得できます。

想定通り、クライアントVMのグローバルIPが表示されました。

www.cman.jpへのアクセス結果
タイトルとURLをコピーしました