3行で要約
- Linux PC(Raspberry Pi)1台とmyDNSを使い無料でVPN構築する手順
- グローバルIPをDDNSに登録しインターネットから名前でアクセスする
- WireGuardのサーバーとクライアントのインストールと設定方法
はじめに
会社のPCを自宅から操作するためにWireGuardでVPNを構築したのですが、ネットでの整理された情報が無く苦戦しました。
DDNSサービスの選定とアカウント作成、ルータの設定、Linuxのセットアップ、VPNサーバーの選定と構築、鍵の生成、IPフォワード、ファイアウォール、NATなどを確認しながら作業するのは結構大変ですね。
VPNを構築したい人は多いと思いますがハードルが高すぎるのでコピペで作業できるように一連の操作をまとめてみました。
本記事ではIPv4での手順を記載します。現在のネットワーク機器なら同じ手順でIPv6でも出来ると思いますが、トラブル発生しにくいIPv4限定の設定しています。
運用は自己責任でお願いします。
知識不足や操作のミスがセキュリティ問題になります。
ポートの解放やファイルやプロセスの権限設定でミスしないように気を付けましょう。
構成
以下のような構成を想定しています。
自宅のリモート作業用PCから、VPNを経由して、オフィスLAN内のサーバーやオフィスPCへアクセス可能になります。
据え置きのオフィスPCに入っているアプリを使いたい、オフィス内のサーバーにアクセスしたいなどの要望に対応するような仕組みとなります。
前提条件
作業の前提条件として、以下が利用可能であることを確認してください。
特にルーターの静的IPマスカレード、DDNS(myDNS)がネットワーク担当者でないと難しいかもです。
一人でネットワーク管理しているような小さなオフィスなら準備可能と思います。
- ルーター(+設定変更の権限)
インターネットからアクセス可能なように静的IPマスカレードの設定可能なルーターが必要です。
大きな会社とかでは情シスしか変更できないので難しいかもです。
企業向けのルーターではなく、光回線業者が提供する端末や、SOHO、家庭用ルーターを想定して書いています。
CiscoやYAMAHAのルーター使用しているような企業の情シスでしたらこんな記事のコピペではなくちゃんと勉強してください。
- VPNサーバー用PC(Linux)
この記事はRaspberry Piを使って説明します。
windows11へアップデートできなかった古いPCにUbuntuインストールした環境でも同じ手順で可能です。
- リモート作業用PC(windows)
インターネット経由でVPNサーバーに接続するクライアントPCです。
VPNクライアントのソフト(WireGuard)をインストールします。
管理者にソフトのインストールを制限されているような環境ではVPNは使えません。
手順はwindowsで記載しますが、クライアントソフトは各種OS用があるので、MacやスマホでもVPN接続できます。
- DDNS
この記事ではmyDNSという無料で利用できるDDNSを使う内容で記載しています。
定期的にIPアドレスをサーバーに通知する必要があるのでVPNサーバーに更新スクリプトを登録します。
概要
作業の概要を図に記載しました。
1.DDNSにグローバルIPを登録
なぜDDNSが必要なのか
一般的なインターネット契約ではグローバルIPが動的に変更される
↓
IPが変わると外部からアクセスするときに困る
↓
DDNSにIPに紐付く名前を登録しておき、クライアントは名前でアクセスすることで解決
動的IPを名前解決するための仕組みがDDNSです。
1-1.グローバルIPの確認
オフィスLAN内のPCで作業してください。
確認方法はいろいろありますが、ここではipifyが提供するAPIを使います。
ブラウザで https://api.ipify.org/ にアクセスしてみてください。
オフィスルーターに登録されているグローバルIPアドレスが表示されます。
無料のAPIなので短時間に連続で呼ぶような使い方はしないようにしましょう。
1-2.DDNSにグローバルIPを登録
https://www.mydns.jp/ にアカウント作成してDDNSの設定を行いましょう。
「詳しく見る」ボタンをクリックして、右上の「JOIN US」をクリック
項目を入力して「確認」ボタンをクリック。
メールに MasterID と Password が送られてきます。
右上の「LOG IN」をクリックしてログイン画面でMasterID と Passwordを入力します。
「DOMAIN INFO」をクリックしてドメインを登録します。
ドメインのページに書いてあるドメインから自由にサブドメインを利用することができます。
0t0.jpドメインを使うのであれば、?????.0t0.jpの?の部分に自由に文字列を指定すればよいです。
赤枠の部分に、xxxxxx.0t0.jp のような形式で記載して、「確認」ボタンをクリックしましょう。
最後に、「IP ADDR DIRECT」ボタンを押してドメインにIPアドレスを指定します。
IPv4 Address欄に先ほど確認したグローバルIPを指定して「確認」ボタンをクリック。
これでDDNSの準備はOKです。
定期的にIPを更新する必要があります。別途5章に記載します。
2.ポートの公開と転送設定
オフィスのルーターの設定画面からポートの公開と、ポート転送の設定をします。
一般的なルーターには「静的IPマスカレード」設定があると思います。
そこに以下の設定を行います。
| 設定 | 値 | 説明 |
|---|---|---|
| 公開ポート | 51820 | WireGuardのデフォルト |
| TCP or UDP | UDP | WireGuardはUDPを使用する |
| 転送先IP | 192.168.2.100 | オフィスLANのVPNサーバーのIPアドレス |
| 転送先ポート | 51820 | WireGuardのデフォルト |
細かい操作はお使いのルーターのマニュアルを見てください。
製品によって名前が違うのでマニュアルを確認して設定しましょう。
Buffaloのwifiルーターは「ポート変換」、NTT貸与(三菱製)の光回線のルーターは「静的IPマスカレード」でした。
上記の画面ではDMZの設定でも同様の転送設定できますがポート指定ではなく全データ転送になるので詳しい人向け。
ポート番号やIPは確認してから登録してください。
3.VPNサーバーの構築
以下の図のように接続するようにVPNサーバーとネットワークの設定を行います。
ぞれぞれのネットワークの設定と、ネットワーク間の矢印の通信を許可する設定を行います。
オフィスLANに接続したLinux PC(Raspberry Pi)で以下の作業を行います。
3-1.WireGuardの設定
$ sudo apt install wireguard
$ wg --version
wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/
# サーバーの秘密鍵生成 /etc/wireguard/privatekey に保存
$ wg genkey | sudo tee /etc/wireguard/privatekey
SMxenC5v0GBCRmcfZTU8WHr6+mYXuDLDlZSBu3hViXo=
# サーバーの秘密鍵から公開鍵を生成 /etc/wireguard/publickey に保存
$ sudo cat /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
qq+ru9x9rqMUll+LTqTyx5upHU7GXWt0feShtlHEzl4=
$ mkdir keys
$ cd keys/
# クライアントの秘密鍵生成 ./client1_priv に保存
$ sudo wg genkey | sudo tee client1_priv
OA3K8H34tFk1+dGMrzoIf8b0TkNncS1gWnl8WfY99VY=
# クライアントの秘密鍵から公開鍵を生成 ./client1_pub に保存
$ cat client1_priv | wg pubkey | tee client1_pub
2S7iU+Rz0hiZqFn1BnvY+gZTOh6YRxJ+VdD8cnDSOEI=
# 事前共有鍵生成 ./client1_psk に保存
$ sudo wg genpsk | sudo tee client1_psk
ljQGEeMVEYUrsYxbq6zpXjK4XRPoSz91ukZhlQx1Elc=
# 生成された鍵を確認 → 設定ファイルに記入する
$ sudo cat /etc/wireguard/publickey
qq+ru9x9rqMUll+LTqTyx5upHU7GXWt0feShtlHEzl4=
$ sudo cat /etc/wireguard/privatekey
SMxenC5v0GBCRmcfZTU8WHr6+mYXuDLDlZSBu3hViXo=
$ cat client1_pub
2S7iU+Rz0hiZqFn1BnvY+gZTOh6YRxJ+VdD8cnDSOEI=
$ cat client1_priv
OA3K8H34tFk1+dGMrzoIf8b0TkNncS1gWnl8WfY99VY=
$ cat client1_psk
ljQGEeMVEYUrsYxbq6zpXjK4XRPoSz91ukZhlQx1Elc=
# 設定ファイルの編集(下の例を参照)
$ sudo nano /etc/wireguard/wg0.conf
# 権限設定
$ sudo chmod 600 /etc/wireguard/wg0.conf
# WireGuardサービスの有効化と起動
$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
# 状態確認
$ sudo systemctl status wg-quick@wg0
# activeになることを確認
サーバー側の設定ファイル(wg0.conf)の各項目の説明:
| セクション | キー | 説明 |
|---|---|---|
| Interface | サーバー側の設定 | |
| Address | VPNサーバーがVPNネットワーク内で使用するIPアドレス(例:10.0.0.1/24) | |
| SaveConfig | 設定の自動保存(true固定でよい) | |
| ListenPort | WireGuardの受信ポート。ルータの転送先ポートに合わせる。(例:51820) | |
| PrivateKey | サーバー側の秘密鍵(/etc/wireguard/privatekeyの内容) | |
| Peer | クライアント側の設定 | |
| PublicKey | クライアント側の公開鍵(client1_pubの内容) | |
| PresharedKey | 追加のセキュリティ用の共有鍵(client1_pskの内容) | |
| AllowedIPs | このクライアントがVPN接続時に使用するIPアドレス範囲(クライアント側の設定ファイル(wg0_client1.conf)のAddressで指定したIPアドレスがこの範囲に含まれている必要があります) |
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SMxenC5v0GBCRmcfZTU8WHr6+mYXuDLDlZSBu3hViXo=
[Peer]
PublicKey = 2S7iU+Rz0hiZqFn1BnvY+gZTOh6YRxJ+VdD8cnDSOEI=
PresharedKey = ljQGEeMVEYUrsYxbq6zpXjK4XRPoSz91ukZhlQx1Elc=
AllowedIPs = 10.0.0.2/32
ついでにクライアント用の設定ファイルも作っておきましょう。4章で使います。
| セクション | キー | 説明 |
|---|---|---|
| Interface | クライアント側の設定 | |
| PrivateKey | クライアント側の秘密鍵(client1_privの内容) | |
| Address | クライアントがVPNネットワーク内で使用するIPアドレス。クライアント増やす場合は重複しないように変更すること(例:10.0.0.2/32) | |
| DNS | DNSサーバーのIPアドレス(ルーターのIPアドレスとGoogle DNSを指定しておく、LAN内にDNSがあれば追加) | |
| Peer | サーバー側の設定 | |
| PublicKey | サーバー側の公開鍵(/etc/wireguard/publickeyの内容) | |
| PresharedKey | 追加のセキュリティ用の共有鍵(client1_pskの内容) | |
| AllowedIPs | VPN経由でアクセスするネットワーク範囲(VPNネットワークとLANネットワーク) | |
| Endpoint | DDNSドメイン名とポート番号(ルーターがVPNサーバーに転送するために公開しているポート) |
[Interface]
PrivateKey = OA3K8H34tFk1+dGMrzoIf8b0TkNncS1gWnl8WfY99VY=
Address = 10.0.0.2/32
DNS = 192.168.2.1, 8.8.8.8
[Peer]
PublicKey = qq+ru9x9rqMUll+LTqTyx5upHU7GXWt0feShtlHEzl4=
PresharedKey = ljQGEeMVEYUrsYxbq6zpXjK4XRPoSz91ukZhlQx1Elc=
AllowedIPs = 10.0.0.0/24, 192.168.2.0/24
Endpoint = ?????.0t0.jp:51820
Endpointは、myDNSで取得したドメインを指定してください。
設定値とネットワークの対応図
3-2.IPフォワード、ファイアウォールの設定
$ cat /proc/sys/net/ipv4/ip_forward
0
# 0 が表示されたら有効化が必要
$ sudo sysctl -w net.ipv4.ip_forward=1
$ cat /proc/sys/net/ipv4/ip_forward
1
# 永続的に有効化
$ sudo sh -c 'echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-wireguard.conf'
$ sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
net.ipv4.ip_forward = 1
$ cat /proc/sys/net/ipv4/ip_forward
1
# 1になることを確認
$ sudo apt install iptables
$ iptables --version
iptables v1.8.11 (nf_tables)
$ nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
lo loopback connected (externally) lo
wg0 wireguard connected (externally) wg0
wlan0 wifi unavailable --
# LAN側のインターフェース名を確認(例:eth0)
$ ip addr show
# wg0(VPNインターフェース)からLANへの転送を許可
# -i wg0: wg0インターフェースから入ってくるパケット
# -o wg0: wg0インターフェースから出ていくパケット
$ sudo iptables -A FORWARD -i wg0 -j ACCEPT
$ sudo iptables -A FORWARD -o wg0 -j ACCEPT
3-3.NATの設定
# NAT設定 eth0は環境によって変える
# MASQUERADE: VPNクライアントからのパケットの送信元IPをVPNサーバーのLAN側IPに書き換える
# 例:eth0の場合
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables-persistentで設定を永続化
$ sudo apt-get install iptables-persistent
$ sudo netfilter-persistent save
4.VPNクライアントの設定
自宅LANのPCで実行してください。
4-1.WireGuardクライアントのインストール
https://www.wireguard.com/install/ にブラウザでアクセスして、インストーラーをダウンロードしてください。
windowsの場合、「Download Windows Installer」ボダンで wireguard-installer.exe をダウンロードして実行すればインストールできます。
4-2.WireGuardでVPN接続
wg0_client1.confを用意する(3-1章)参照
WireGuardを起動し、「トンネルを追加」をクリックし、ファイル選択ダイアログでwg0_client1.confを選択する。
※「ファイルからトンネルをインポート」ボタンでも同じです。
有効化ボタンをクリックしてVPN接続開始。
うまく接続できれば、転送の数値が随時更新されます。
VPN切断する場合は「無効化」ボタンをクリックしてください。
5. DDNSの定期更新
Linuxに常駐してIP更新する方法と、Linux得意じゃない人向けのWindows常駐スクリプトの方法を記載しておきます。
Windowsで定期更新する常駐するスクリプト(Linux得意じゃない人向け)
オフィスLANのPCで実行してください。
1.myDNS更新スクリプトの作成
tasktray.ps1と update_mydns.vbsを同一フォルダに保存します。
(例:C:\Users\ {ユーザー名} \myDNS)
tasktray.ps1の myDNS_MID と myDNS_PWD にログイン用のIDとパスワードを設定します。
クリックして展開(tasktray.ps1 , update_mydns.vbs)
Add-Type -AssemblyName System.Windows.Forms
# 定数定義
$TIMER_INTERVAL = 60 * 60 * 1000 # timer_function実行間隔(ミリ秒)
$MUTEX_NAME = "Global\mutex" # 多重起動チェック用
$myDNS_MID = "xxxxxxxx"
$myDNS_PWD = "xxxxxxxx"
$last_ipv4 = ""
function timer_function($notify){
# myDNSの更新処理
$datetime = (Get-Date).ToString("yyyy/MM/dd HH:mm:ss")
$message = "IPアドレス更新チェック : " + $datetime
# ツールチップに登録
$notify.Text = $datetime
# グローバルIP取得
try { $ipv4 = (Invoke-RestMethod -Uri "https://api.ipify.org/").Trim() } catch { $ipv4 = "" }
Write-Host "ipv4 : " $ipv4 " last_ipv4 : " $script:last_ipv4
if ($ipv4 -ne $script:last_ipv4) {
$uri = "https://ipv4.mydns.jp/directip.html?MID=$([uri]::EscapeDataString($myDNS_MID))&PWD=$([uri]::EscapeDataString($myDNS_PWD))&IPV4ADDR=$([uri]::EscapeDataString($ipv4))"
$result = Invoke-RestMethod -Uri $uri
$message = $message + " \r\n" + $result.Trim()
# バルーンで表示
$notify.BalloonTipIcon = 'Info'
$notify.BalloonTipText = $message
$notify.BalloonTipTitle = 'myDNS'
$notify.ShowBalloonTip(1000)
}
$script:last_ipv4 = $ipv4
Write-Host $message
}
function main(){
$mutex = New-Object System.Threading.Mutex($false, $MUTEX_NAME)
# 多重起動チェック
if ($mutex.WaitOne(0, $false)){
# タスクバー非表示
$windowcode = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);'
$asyncwindow = Add-Type -MemberDefinition $windowcode -name Win32ShowWindowAsync -namespace Win32Functions -PassThru
$null = $asyncwindow::ShowWindowAsync((Get-Process -PID $pid).MainWindowHandle, 0)
$application_context = New-Object System.Windows.Forms.ApplicationContext
$timer = New-Object Windows.Forms.Timer
$path = Get-Process -id $pid | Select-Object -ExpandProperty Path # icon用
$icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
# タスクトレイアイコン
$notify_icon = New-Object System.Windows.Forms.NotifyIcon
$notify_icon.Icon = $icon
$notify_icon.Visible = $true
# アイコンクリック時のイベント
$notify_icon.add_Click({
if ($_.Button -eq [Windows.Forms.MouseButtons]::Left) {
# タイマーで実装されているイベントを即時実行する
$timer.Stop()
$timer.Interval = 1
$timer.Start()
}
})
# メニュー
$menu_item_exit = New-Object System.Windows.Forms.MenuItem
$menu_item_exit.Text = "Exit"
$notify_icon.ContextMenu = New-Object System.Windows.Forms.ContextMenu
$notify_icon.contextMenu.MenuItems.AddRange($menu_item_exit)
# Exitメニュークリック時のイベント
$menu_item_exit.add_Click({
$application_context.ExitThread()
})
# タイマーイベント.
$timer.Enabled = $true
$timer.Add_Tick({
$timer.Stop()
timer_function($notify_icon)
# インターバルを再設定してタイマー再開
$timer.Interval = $TIMER_INTERVAL
$timer.Start()
})
$timer.Interval = 1
$timer.Start()
[void][System.Windows.Forms.Application]::Run($application_context)
$timer.Stop()
$notify_icon.Visible = $false
$mutex.ReleaseMutex()
}
$mutex.Close()
}
main
Set ws = CreateObject("Wscript.Shell")
command ="powershell -NoProfile -ExecutionPolicy Unrestricted .\tasktray.ps1"
ws.run command, 0
2.自動起動の設定
エクスプローラーでupdate_mydns.vbsを右クリックして「ショートカットの作成」をクリック。「update_mydns.vbs - ショートカット」という名前のショートカットのファイルが作成されます。
このショートカットファイルをスタートアップフォルダにコピーします。
(例:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup もしくは C:\ProgramData\Microsoft\Windows\スタート メニュー\プログラム\スタートアップ)
スクリーンショットではショートカットの名前を「update_mydns.vbs」にしています。
3.動作確認
Windowsを再起動してログインし直すタイミングでスクリプトが常駐します。
1時間毎にチェックして変更を検知すれば更新APIを呼びます。
終了する場合は右クリックのメニューからExitクリックしてください。
Linux systemdで定期更新する
1.IP登録スクリプト
グローバルIPを確認し変更があった場合は、myDNSのIPを更新するpythonスクリプトを用意します。
IDとパスワードはconfig.jsonに出してあります。
クリックして展開(updatemydns.py , config.json)
#!/usr/bin/env python3
"""myDNS IP更新スクリプト"""
import json
import os
import urllib.parse
import urllib.request
from pathlib import Path
from datetime import datetime
SCRIPT_DIR = Path(__file__).parent.absolute()
CONFIG_FILE = SCRIPT_DIR / "config.json"
DEFAULT_LAST_IP_FILE = Path.home() / ".mydns" / "last_ip.json"
print(f"IPアドレス更新チェック : {datetime.now().strftime('%Y/%m/%d %H:%M:%S')}")
# 設定読み込み
try:
c = json.load(open(CONFIG_FILE, 'r', encoding='utf-8'))
mid, pwd = c['MID'], c['PWD']
ip_file = os.path.expanduser(c.get('last_ip_file', str(DEFAULT_LAST_IP_FILE)))
except Exception:
exit()
# IP取得
try:
with urllib.request.urlopen(urllib.request.Request("https://api.ipify.org/"), timeout=10) as r:
current_ip = r.read().decode('utf-8').strip()
except Exception:
exit()
# 前回IP読み込み
last_ip, last_updated = None, None
ip_path = Path(ip_file)
if ip_path.exists():
try:
d = json.load(open(ip_path, 'r', encoding='utf-8'))
last_ip = d.get('ipv4')
if d.get('last_updated'):
last_updated = datetime.fromisoformat(d['last_updated'])
except Exception:
pass
print(f"ipv4 : {current_ip} last_ipv4 : {last_ip}")
# 更新判定
if current_ip != last_ip:
print("IPアドレスが変更されました。myDNSを更新します...")
elif last_updated is None:
print("初回実行のため更新します...")
elif (datetime.now() - last_updated).days >= 7:
print("最終更新から1週間経過したため更新します...")
else:
print("更新なし")
exit()
# myDNS更新
params = urllib.parse.urlencode({'MID': mid, 'PWD': pwd, 'IPV4ADDR': current_ip})
try:
with urllib.request.urlopen(urllib.request.Request(f"https://ipv4.mydns.jp/directip.html?{params}"), timeout=10) as r:
print(f"更新成功: {r.read().decode('utf-8').strip()}")
ip_path.parent.mkdir(parents=True, exist_ok=True)
json.dump({'ipv4': current_ip, 'last_updated': datetime.now().isoformat()}, open(ip_path, 'w', encoding='utf-8'), indent=2, ensure_ascii=False)
except Exception:
pass
myDNSのメールで通知されたIDとパスワードを設定します。
{
"MID": "xxxxx",
"PWD": "xxxxx",
"last_ip_file": "~/.mydns/last_ip.json"
}
2.systemdで定期実行する
systemdに登録するための設定ファイルを用意します。
クリックして展開(mydns-update.service , mydns-update.timer)
<ユーザー名>は環境に合わせて入力してください
[Unit]
Description=myDNS IP Address Update Service
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=<ユーザー名>
WorkingDirectory=/opt/myDNS
ExecStart=/usr/bin/python3 /opt/myDNS/updatemydns.py
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
[Unit]
Description=myDNS IP Address Update Timer
Requires=mydns-update.service
[Timer]
OnBootSec=1min
OnUnitActiveSec=1h
AccuracySec=1min
[Install]
WantedBy=timers.target
# 例: /opt/mydnsに配置する場合
sudo mkdir -p /opt/mydns
sudo cp updatemydns.py /opt/mydns/
sudo cp config.json /opt/mydns/
sudo chmod +x /opt/mydns/updatemydns.py
# サービスファイルとタイマーファイルをコピー
sudo cp mydns-update.service /etc/systemd/system/
sudo cp mydns-update.timer /etc/systemd/system/
# systemdの設定をリロード
sudo systemctl daemon-reload
# タイマーを有効化
sudo systemctl enable mydns-update.timer
# タイマーを開始
sudo systemctl start mydns-update.timer
リモート作業に便利なもの
リモートデスクトップ
オフィスLANのwindows PCにリモートデスクトップする方法
クリックして展開
操作されるオフィスのwindows PCでリモートデスクトップの設定をオンにします。
設定を起動し、「システム」-「リモートデスクトップ」を選択し、
「リモートデスクトップ」を「オン」にします。
windows Proのみ表示されます。Homeの場合は使えません。
オフィスLANのvpnサーバーにリモートデスクトップする方法
クリックして展開
Waylandで動作するリモートデスクトップアプリは無さそうなのでX11+xrdpで手順を記載します。
# WaylandかX11か確認
$ echo $XDG_SESSION_TYPE
# X11でない場合は、raspi-configで変更する
$ sudo raspi-config
# 画面で以下を選択
# 6 Advanced Options
# A7 Wayland
# W1 X11
$ echo $XDG_SESSION_TYPE
x11
sudo apt install xrdp
リモートデスクトップのクライアントの使い方
クリックして展開
Windowsのスタートメニューから、「リモートデスクトップ」で検索して、リモートデスクトップ接続アプリを起動します。
接続先サーバーのIPアドレスを入力し「接続」ボタン
-
Windowsの場合
接続先がWindowsの場合は、いつものログイン画面が表示されますので、ユーザー名とパスワードを入力すればオフィスのいつもの環境が利用できます。 -
XrdpをインストールしたLinuxPCの場合
xrdpのログイン画面がでるので、Linuxのログインユーザーとパスワードを入力して、「OK」ボタンをクリックすればリモートデスクトップでLinuxが使えます。
Wake on LAN
オフィスLANのPCの電源が落ちている場合にネットワークから起動します。
クリックして展開
powershellでWOLのmagic packetを送信するスクリプトです。
起動したいPCのIPアドレスとmacアドレスが必要ですので、書き換えてください。
# wake on lan (WOL)の電源投入スクリプト
#
# 使い方
# wol.ps1 -macAddress <mac-address> -target <cast-address>
# <mac-address> Macアドレス xx:xx:xx:xx:xx:xx コロンで区切る形式。必須
# <cast-address> 送信するアドレス UDPのアドレス。
# 例
# wol.ps1 -macAddress 00:00:00:ff:dd:ff -target 192.168.0.255
param($macAddress,$target)
$header=[byte[]](@(0xFF)*6)
$body=[byte[]]($macAddress.split(":")|%{ [Convert]::ToInt32($_, 16)})
$magicPacket=$header + $body * 16
$udp=new-object System.Net.Sockets.UdpClient
$udp.Connect($target,2304)
$udp.Send($magicPacket,$magicPacket.Length)|out-null
$udp.Close()
"send magicPacket [IP=" + $target.ToString() + "] [MAC=" + $macAddress.ToString() + "]"
ダブルクリックで使えるようにps1を呼ぶbatファイルを作っておきましょう。
@echo off
@rem Macアドレス(環境に合わせて指定)
set MAC_ADDRESS=00:00:00:ff:ff:ff
@rem 送信先アドレス(環境に合わせて指定)
set CAST_ADDRESS=192.168.2.255
powershell -NoProfile -ExecutionPolicy Unrestricted .\wol.ps1 -macAddress %MAC_ADDRESS% -target %CAST_ADDRESS%
pause
PC名でのアクセスについて
私が作成した環境ではVPN接続先のネットワークのwindows PCに名前アクセスできなかったです。
VPNサーバーにDNSをインストールしてみたけど、名前解決できないアプリがあったり動作が不安定。
私の使用用途ではIPアドレス指定で困ってないので深く調査してないです。
どうしても名前でアクセスする必用がある場合は、クライアントPCのhostsに登録すればよいです。
おわりに
wireguardの使い方を紹介する記事は結構あるのですがDDNSとセットで一連の流れを説明したいい感じの記事が無いようでしたので書いてみました。
VPNはネットワーク初心者がやりたいけど怖いから手が出せない範囲と思います。
本記事で流れを理解して怖さを軽減してチャレンジしてみましょう。
初心者向けサーバー構築シリーズ


























