« 導入事例:Arcserve UDP とクラウド ストレージ ゲートウェイの連携 | トップページ | Arcserve UDP:Windows のバックアップを PowerShell から実行する方法 »

2020年3月31日 (火)

Arcserve UDP:PC を VPN 経由でバックアップさせない方法

ノートパソコンのバックアップを Arcserve UDP を使って社内の NAS や復旧ポイントサーバに取っているとします。普段は社内のネットワークで問題なくバックアップできますが、出張やリモートワークで PC を持ち出した場合はどうでしょう。

リモートアクセス VPN を使って社内のネットワークに接続すれば、バックアップ先の NAS や復旧ポイントサーバに通信できるようになり、スケジュール通りにバックアップが始まります。

でも、帯域の限られる VPN 経由のアクセスなのでいつも以上にバックアップに時間がかかるはずです。増分バックアップとはいえ、そこそこ大きい容量のデータを送るので、モバイル ルーターやスマホの通信制限に引っかかってしまうこともあるかもしれません。

そこで、今日は PC が普段と違うネットワークにいるときには自動的にバックアップを中止させ、データを流さない方法を紹介します。

00_backup_from_different_network

 

■ 手順 1:スクリプトを保存する

PC がどのネットワークに接続しているかを IPv4 アドレスで判別し、社外にいる場合はバックアップを失敗させる PowerShell スクリプトを作りました。これを PowerShell ISE などのエディタにコピペして、オレンジ色の箇所を PC が普段接続している社内のネットワーク アドレス(※1)に書き換え、.ps1 形式のファイルとして保存します。

# ロギングを開始
$filename = Get-Date -Format "yyyy-MMdd-HHmmss"
Start-Transcript "C:\UDP_PS_Logs\$filename.network_check.log"

# あらかじめ、PC が社内で接続するネットワークのネットワークアドレス(IPv4)を記入しておく。
$MyNetworks = @("192.168.1.0", "192.168.2.0", "192.168.2.128")
Echo "My internal networks are $MyNetworks"

# 現在有効な NIC の IPアドレスとサブネットマスクを取得
$CurrentIP = Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Select-Object -ExpandProperty IPAddress
$CurrentSubnet = Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Select-Object -ExpandProperty IPSubnet
Echo "Current IP addresses are $CurrentIP"
Echo "Current subnet masks are $CurrentSubnet"

# PC が社内ネットワークにいるか判定する。
For($i=0; $i -lt $CurrentIP.Count; $i++){

    # 現在有効な NIC の IP アドレスとサブネットマスクをオクテットに分割。
    $IPOctet = $CurrentIP[$i] -split "\."
    $SubnetOctet = $CurrentSubnet[$i] -split "\."

    # 現在のネットワークアドレスを算出する。
    $NetworkIP = ""
    For($j = 0; $j -lt 4; $j++){

        # IP アドレスとサブネットマスクの各オクテットを int 型に変換。
        Try{
            $intIPOctet = [int]$IPOctet[$j]
            $intSubnetOctet = [int]$SubnetOctet[$j]

        # IPv6 アドレスなど処理できない値が来た場合は 0 を代入。
        } Catch {
            $intIPOctet = 0
            $intSubnetOctet = 0
        }

        # IP アドレスとサブネットマスクの各オクテットを bit 積算。
        $intNetworkIPOctet = $intIPOctet -band $intSubnetOctet

        # 各オクテットの bit 積算の結果を合成。
        $NetworkIP += [string]$intNetworkIPOctet
        If($j -ne 3){
            $NetworkIP += "."
        }
    }
    Echo "One of the current network address is $NetworkIP"

    # 算出したネットワークアドレスが社内ネットワークのものに含まれればフラグを立てる。
    If($MyNetworks -Contains $NetworkIP){
        $InternalNetwork = $True
        Echo "Detected this machine is in the internal network."
    }
}

# 社内ネットワークにいることを検出したら Arcserve UDP に 0 を返してバックアップを継続させる。
If($InternalNetwork -eq "True"){
    Echo "Continue the backup job."
    Exit 0
}

# 社内ネットワークにいることを検出できなければ、Arcserve UDP に 1 を返してバックアップを失敗させる。
Else{
    Echo "This machine seems to be out of the office. The backup job is going to be terminated."
    Exit 1
}

 

■ 手順 2:Arcserve UDP の実行前スクリプトとして登録する

Arcserve UDP の設定画面の中で、[バックアップ開始前にコマンドを実行] にチェックを入れ、以下の例のように手順1 で作ったスクリプトを登録します。(※2

powershell.exe -ExecutionPolicy RemoteSigned C:\network_check.ps1

[終了コード] にもチェックを入れて値を「0」にします。2 つあるラジオ ボタンは [ジョブを続行] を選択します。順番が前後しましたが、PowerShell を実行するユーザの [ユーザ名] と [パスワード] も入力しておきます。(※3

01_pre_script_config

 

ここまで設定出来たら実際にスクリプトがうまく動くか試してみます。社外のネットワークから接続した場合は、バックアップ ジョブが始まってすぐに中止されました。ジョブのステータスは「失敗」になっています。

02_failed_job

 

以上、ホテがお伝えしました。

 

<関連記事>

無料の Arcserve UDP で PC をバックアップする ~ (1) ダウンロード

Windowsサーバを設けずにクライアントPCをバックアップできます!~Arcserve UDP Workstation Edition~

 


※1 念のため、ここで記入するのはネットワークアドレスです。PC の IP アドレスではありません。

※2 PowerShell のスクリプトを実行させるには、この例のように powershell.exe の引数としてスクリプト ファイルを渡してやる必要があります。

※3 ちなみに、今回は Windows Agent の設定画面を出していますが、Arcserve UDP コンソールでも同じように設定できます。

« 導入事例:Arcserve UDP とクラウド ストレージ ゲートウェイの連携 | トップページ | Arcserve UDP:Windows のバックアップを PowerShell から実行する方法 »

技術情報」カテゴリの記事

Arcserve UDP」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« 導入事例:Arcserve UDP とクラウド ストレージ ゲートウェイの連携 | トップページ | Arcserve UDP:Windows のバックアップを PowerShell から実行する方法 »