8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【VPN設備なし】WireGuardでオフィスのAIサーバー(DGX Spark ollama)を外部利用

Last updated at Posted at 2026-01-29

はじめに

GMOコネクトの永田です。

DGX Sparkが届きました!🎉

260128190725294_2.jpeg

しかし、すぐに問題が…

「オフィス外からollamaを使いたいけど、グローバルIPもVPN設備もない!」

同じような環境の方も多いのではないでしょうか?

今回はWireGuard + AWS EC2の組み合わせで、この課題を解決してみました。
構築にかかった時間は約1時間、月額コストは数千円程度です。

構築後にできること

  • 自宅やカフェから、オフィスのDGX Sparkへ安全にアクセス
  • ollamaのAPIを直接呼び出して生成AIを活用
  • 同じ構成で他の社内リソースにもアクセス可能

WireGuardの導入は情シスなど社内の承認を得た上で実施してください。

構築した環境(イメージ)

最終的に構築した環境は以下になります。(IPアドレスや、社内の構成図などは適当です。)

Gemini_Generated_Image_lj2vmslj2vmslj2v.jpeg

AWS EC2上にグローバルIPを持つWireGuard Serverを構築し、DGX Sparkとアクセス元の端末(今回はMacBook)にWireGuard Clientを設定しています。

では、早速構築していきましょう!

WireGuard Serverの構築

AWS EC2環境の構築

今回の構成の方針は以下としました。(導入先によって要件が変わると思いますので、適時調整してください)

  • 構成
    • 可用性よりコスト重視で、Public Subnetに設置したEC2の1台構成とする
    • Ubuntu 24.04 LTS (x86_64)を利用
    • EC2起動時の自動実行(UserData)でWireGuardのインストールまで実施
  • セキュリティ
    • WireGuard portは特定のIPからのみSecurityGroupで許可
      • 接続元のWireGuard Client IPはPrefixListで手動管理
    • EC2へのSSHはSessionManager経由のみ
    • UbuntuのUFWは利用せず、SecurityGroupのみで制限

今回利用したCloudFormationを参考としてgithubに置きました。
上記のような要件をGithub Copilot Plan --> Agent(Claude Sonnet 4.5)に伝えて、生成してもらっています。

WireGuard Serverの設定

サーバー鍵の生成

Session Managerでサーバーに接続し、WireGuard鍵を生成します。

sudo -i
cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

# 公開鍵を確認(クライアント設定で使用)
cat publickey

WireGuard Serverのconfig作成

/etc/wireguard/wg0.conf に設定ファイルを作成します。
今回VPNのIP Rangeとして10.0.10.0/24としました。

[Interface]
# サーバーの秘密鍵 (サーバー上の /etc/wireguard/privatekey の内容を設定)
PrivateKey = <REPLACE_WITH_SERVER_PRIVATE_KEY>

# VPN内でのサーバーアドレス + IP Range
Address = 10.0.10.1/24

# WireGuardリスニングポート
ListenPort = 51820

# iptablesルール (VPNトラフィックの転送とNATを有効化)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens5 -j MASQUERADE

WireGuard Serverの起動

設定ファイルが出来ましたので、WireGuardを起動してみます。

# WireGuard起動
sudo wg-quick up wg0

# 自動起動設定
sudo systemctl enable wg-quick@wg0

起動できたか状態を見てみましょう。

# 状態確認
sudo wg show

interface: wg0
  public key: <WireGuardサーバー公開鍵>
  private key: (hidden)
  listening port: 51820

interface: wg0 が認識されており、大丈夫そうですね!

WireGuard Clientの設定(MacBook編)

続いてClient側を設定していきます。
インストール手順は公式ページに記載があり、macOSの場合はApp StoreからWireGuardをインストールするだけです。

WireGuard Clientの鍵生成&設定ファイルの作成(MacBook編)

最初、macOS版WireGuardでどうやって鍵生成をするんだろう?と疑問でしたが、空の設定を作ると鍵も生成されました。

スクリーンショット 2026-01-29 12.02.00.png

スクリーンショット 2026-01-28 7.48.38_.png

最終的に以下の設定になるように、追記して保存します。

[Interface]
PrivateKey = <クライアント秘密鍵>
Address = <クライアントに割り当てたVPN内アドレス>/32

[Peer]
PublicKey = <WireGuardサーバー公開鍵>
Endpoint = <WireGuardサーバーのパブリックIP>:51820
# Split Tunnel: Office DGX Spark宛のみVPN経由
AllowedIPs = 10.0.10.0/24
# NAT越えやファイアウォール越えのためのキープアライブ
PersistentKeepalive = 25

保存すると、許可ダイアログがでるので許可します。

スクリーンショット 2026-01-28 8.32.31_.png

設定画面が以下のような表示になると準備完了です!
接続自体は、WireGuard Server側の準備が終わってからになります。

スクリーンショット 2026-01-28 8.34.21_.png

WireGuard Server側でクライアント追加(MacBook/DGX Spark共通)

クライアントの公開鍵と割り当てたVPN内アドレスをサーバーの wg0.conf に追記します。

[Peer] # <デバイス名>などをコメントに書いておくと後で分かりやすいです
PublicKey = <クライアント公開鍵>
AllowedIPs = <クライアントに割り当てたVPN内アドレス>/32
PersistentKeepalive = 25

その後、WireGuard Serverに設定を同期するとサーバー側も準備完了です!

## サーバーで設定反映
sudo -i
wg syncconf wg0 <(wg-quick strip wg0)

## 状態確認
wg show

interface: wg0
  public key: <WireGuard Serverの公開鍵>
  private key: (hidden)
  listening port: 51820

peer: <追加したClientの公開鍵>
  allowed ips: <クライアントに割り当てたVPN内アドレス>/32
  persistent keepalive: every 25 seconds

Peerセクションが追加されていることを確認してください。

WireGuard Clientの接続(MacBook編)

では、準備が終わったので、WireGuardで接続します。
macOSの場合は先ほどの設定画面で「有効化」ボタンを押すだけです。

スクリーンショット 2026-01-28 10.47.17_.png

状態が「有効」になっていれば成功です!

WireGuard Server側もログを確認してみましょう。

sudo wg show

interface: wg0
  public key: <WireGuard Serverの公開鍵>
  private key: (hidden)
  listening port: 51820

peer: <WireGuard Clientの公開鍵>
  endpoint: <ClientIP>:64371
  allowed ips: 10.0.10.101/32
  latest handshake: 1 minute, 18 seconds ago
  transfer: 340 B received, 124 B sent
  persistent keepalive: every 25 seconds

handshake が表示されていればOKです。
その後、MacBook側でpingやtracerouteなど好きな通信を試してください。

WireGuard Clientの設定(DGX Spark編)

次にオフィスにあるDGX Sparkの設定をします。
DGX SparkはUbuntuベースなので、Ubuntuの手順で実施します。

WireGuard Clientの鍵生成&設定ファイルの作成(DGX Spark編)

sudo apt install -y wireguard でインストール後、まずは鍵を生成します。
手順はサーバーと同じです。

# 適当な場所で鍵生成
mkdir -p ~/.wireguard
cd ~/.wireguard

# クライアント側で鍵生成
wg genkey | tee privatekey | wg pubkey > publickey

# 公開鍵と秘密鍵を確認
cat publickey
cat privatekey

macOSで作成した設定と同じような内容で、/etc/wireguard/wg0.conf に保存してください。

その後、WireGuard Server側の wg0.conf にDGX Sparkのクライアント設定を追加し、wg syncconf wg0 <(wg-quick strip wg0) で設定を反映してください。

WireGuard Clientの接続(DGX Spark編)

起動自体はWireGuard Serverと同じ手順です。

# WireGuard起動
sudo wg-quick up wg0

# 自動起動設定
sudo systemctl enable wg-quick@wg0

起動後、Server側で sudo wg show を実行し、DGX Sparkのhandshakeが確認できたら準備完了です。

MacBook から DGX Spark (10.0.10.10) へのsshなどの疎通を確認してください。

ollamaのDGX Sparkへの導入

さて、ネットワークは疎通するようになったので、次はWireGuard経由でMacBookからollamaを呼び出せるように、DGX Sparkへollamaを導入します。

ollamaのインストール

手順はUbuntuと同じです。念の為NVIDIA Driverが正しく動作していることを確認してください。

# Update OS
sudo apt update && sudo apt upgrade -y

# Check NVIDIA Driver(エラーの場合にはUbuntu再起動)
nvidia-smi

# Install Ollama
curl -fsSL https://ollama.com/install.sh | sh
(中略)
Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service.
>>> NVIDIA GPU installed.

ollamaのサービスが作成され、NVIDIA GPUが認識されていれば、導入完了です!

WireGuard経由でのollamaアクセスの許可

デフォルトではollamaはlocalhostからの通信のみを許可しているため、WireGuard経由の通信を許可するように設定を変更します。

# ollama設定ファイル編集
sudo systemctl edit ollama.service

[Service]で環境変数を2つ追加します。OLLAMA_HOST はDGX SparkのWireGuardのIPアドレス(10.0.10.10)に設定します。

必ず、### Edits below this comment will be discarded の前に追記してください。

### Editing /etc/systemd/system/ollama.service.d/override.conf
### Anything between here and the comment below will become the contents of the file

[Service]
Environment="OLLAMA_HOST=10.0.10.10:11434"
Environment="OLLAMA_ORIGINS=10.0.10.*"

### Edits below this comment will be discarded
(略)

設定が終わったらollamaサービスを再起動し、環境変数とport bindを確認してください。

# ollamaサービス再起動
sudo systemctl restart ollama

# 環境変数確認
sudo systemctl show ollama.service | grep Environment

# ポート確認
sudo lsof -i :11434 -n -P

MacBookからWireGuard経由でDGX Sparkのollama呼び出し

最後に、実際にollamaにアクセスしてみます。MacBookがWireGuardに接続されている状態で実行してください。

curl http://10.0.10.10:11434/api/tags

{"models":[{"name":"gpt-oss:120b","model":"gpt-oss:120b","modified_at":"2026-01-29T06:43:28.777350431+09:00","size":65369818941,"digest":"a951a23b46a1f6093dafee2ea481d634b4e31ac720a8a16f3f91e04f5a40ecd9","details":{"parent_model":"","format":"gguf","family":"gptoss","families":["gptoss"],"parameter_size":"116.8B","quantization_level":"MXFP4"}}]}

無事に呼び出せましたね!😊

まとめ

WireGuardを使用することで、特別なVPN設備がない環境でも、セキュアにオフィス内のリソース(DGX Sparkのollama)にアクセスすることができました。

構築のポイント:

  • AWS EC2にWireGuard Serverを構築し、グローバルIPを割り当て
  • クライアント側でWireGuard接続をセットアップ
  • ollama側で外部からの接続を許可する環境変数を設定

このアプローチは他のサービス(データベース、内部ツールなど)にも応用できます。


最後に、GMOコネクトではサービス開発支援や技術支援をはじめ、幅広い支援を行っておりますので、何かありましたらお気軽にお問合せください。

お問合せ: https://gmo-connect.jp/contactus/

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?