序論:ネットワーク設定が重要な理由

ホームサーバーを構築したら、次に最も重要な段階が残っています。それがネットワーク設定です。どんなに良いハードウェアに完璧なOSをインストールしても、ネットワーク設定が正しくできていなければ、外部からアクセスできない孤立したコンピュータに過ぎません。

今回の編では、ホームサーバーにどこからでも安全にアクセスできるようにするネットワーク設定全般を扱います。固定IP設定から始めて、ポートフォワーディング、DDNS設定、SSHリモートアクセス、セキュリティ強化、そしてWireGuard VPNまで順を追って説明します。最初は複雑に見えるかもしれませんが、一つずつ追っていけばいつの間にかエキスパートレベルのネットワーク環境を構築できるでしょう。

1. 内部ネットワークの理解と固定IP設定

1.1 内部IPと外部IPの違い

ネットワーク設定を始める前に、まずIPアドレスの概念を正確に理解する必要があります。家庭で使用するネットワークには2種類のIPアドレスが存在します。

外部IP(グローバルIP)はISP(インターネットサービスプロバイダー)がご家庭に割り当てるアドレスです。世界で唯一であり、外部から皆さんのネットワークを見つける時に使用されます。通常はルーターのWANポートに割り当てられます。

内部IP(プライベートIP)はルーターが家庭内の各機器に割り当てるアドレスです。192.168.x.x、172.16.x.x、10.x.x.x帯域を使用し、同じ内部ネットワーク内でのみ通信できます。

1.2 サーバーに固定IP設定する

サーバーは常に同じIPアドレスを持つ必要があります。DHCPが自動で割り当てたIPは再起動したり時間が経つと変更される可能性があるので、ポートフォワーディングや他の設定が動作しなくなります。

Ubuntu/DebianでNetplanを利用した固定IP設定:

# 現在のネットワークインターフェース確認
ip addr show

# Netplan設定ファイル編集
sudo nano /etc/netplan/00-installer-config.yaml

設定ファイルの内容を以下のように修正します:

network:
  version: 2
  ethernets:
    enp0s3:  # 実際のインターフェース名に変更
      dhcp4: no
      addresses:
        - 192.168.1.100/24  # 希望の固定IP
      routes:
        - to: default
          via: 192.168.1.1  # ルーターIP(ゲートウェイ)
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

設定を適用します:

# 設定適用
sudo netplan apply

# 変更されたIP確認
ip addr show

Tip:固定IPを設定する時は、ルーターのDHCP範囲外のアドレスを選択するのが良いです。例えばDHCPが192.168.1.2〜192.168.1.99を使用しているなら、サーバーは192.168.1.100以上のアドレスを使用すれば衝突を避けられます。

2. ポートフォワーディングの理解と設定

2.1 ポートフォワーディングとは?

ポートフォワーディングは、外部から入ってくる特定ポートのトラフィックを内部ネットワークの特定機器に転送する機能です。ルーターは基本的に外部からの接続を遮断するので、サーバーにアクセスするには必ずポートフォワーディング設定が必要です。

例えば外部からSSHで接続しようとすれば、ルーターに「22番ポートに入ってくる接続は192.168.1.100に送って」と設定する必要があります。

2.2 主なポート番号

サービス ポート番号 説明
SSH 22 リモートターミナル接続
HTTP 80 Webサーバー
HTTPS 443 セキュアWebサーバー
FTP 21 ファイル転送
Samba 445 Windowsファイル共有
WireGuard 51820 VPN

2.3 ルーターでポートフォワーディング設定

ポートフォワーディング設定はルーターの管理ページで行います。ブラウザでルーターIP(通常192.168.1.1または192.168.0.1)にアクセスした後、ポートフォワーディングまたは仮想サーバーメニューを探します。

一般的な設定項目:

  • サービス名:区別しやすい名前(例:SSH、Web Server)
  • 外部ポート:外部からアクセス時に使用するポート
  • 内部IP:サーバーの固定IPアドレス
  • 内部ポート:サーバーで実際にサービスしているポート
  • プロトコル:TCP、UDP、または両方

セキュリティTip:SSHポートを22の代わりに別の番号(例:2222、22022)に変更すれば、自動化された攻撃をかなり避けることができます。この場合、外部ポートを希望の番号に設定し、内部ポートは22を維持すれば良いです。

3. DDNS設定で動的IP問題を解決

3.1 DDNSが必要な理由

ほとんどの家庭用インターネットは動的IPを使用しています。つまり、ISPが周期的にまたはルーター再起動時に外部IPを変更する可能性があります。IPが変わるたびに新しいアドレスを確認しなければならないならとても不便です。

DDNS(Dynamic DNS)はこの問題を解決します。変更されるIPアドレスを固定されたドメイン名に自動で連結してくれるので、myserver.duckdns.orgのようなアドレスでいつでもアクセスできるようになります。

3.2 Duck DNS設定

Duck DNSは無料で使えるDDNSサービスです。設定が簡単で安定的です。

ステップ1:Duck DNSアカウント作成

  1. https://www.duckdns.org にアクセス
  2. ソーシャルアカウントでログイン
  3. 希望のサブドメインを作成(例:myserver)
  4. トークン値を確認して保存

ステップ2:サーバーで自動更新スクリプト設定

# スクリプトディレクトリ作成
mkdir -p ~/duckdns
cd ~/duckdns

# 更新スクリプト作成
nano duck.sh

スクリプト内容:

#!/bin/bash
echo url="https://www.duckdns.org/update?domains=myserver&token=YOUR_TOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K -

スクリプト実行権限付与およびテスト:

# 実行権限付与
chmod 700 duck.sh

# テスト実行
./duck.sh

# 結果確認(OKが出力されるはず)
cat duck.log

ステップ3:cronで自動実行設定

# crontab編集
crontab -e

# 5分ごとに実行するよう追加
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

4. SSHリモートアクセス設定

4.1 SSHサーバーインストールと基本設定

SSH(Secure Shell)はリモートでサーバーを管理する最も基本的で安全な方法です。

# SSHサーバーインストール(ほとんどはすでにインストール済み)
sudo apt update
sudo apt install openssh-server

# SSHサービス状態確認
sudo systemctl status ssh

# 起動時に自動開始設定
sudo systemctl enable ssh

4.2 SSHセキュリティ強化設定

デフォルト設定でも動作しますが、セキュリティのためにいくつかの設定を変更するのが良いです。

# SSH設定ファイル編集
sudo nano /etc/ssh/sshd_config

推奨設定変更:

# ポート変更(オプション、デフォルト22から変更)
Port 22022

# root直接ログイン禁止
PermitRootLogin no

# パスワード認証(キー設定後noに変更)
PasswordAuthentication yes

# 空パスワード禁止
PermitEmptyPasswords no

# 最大認証試行回数
MaxAuthTries 3

# ログイン猶予時間
LoginGraceTime 60

# 特定ユーザーのみ許可(オプション)
AllowUsers yourusername

設定適用:

# 設定文法検査
sudo sshd -t

# SSHサービス再起動
sudo systemctl restart ssh

4.3 SSHキー認証設定

パスワードの代わりにSSHキーを使用するとセキュリティが大幅に向上します。キーファイルがなければ接続自体が不可能なので、ブルートフォース攻撃から安全です。

クライアント(ローカルPC)でキー生成:

# キーペア生成(Windows PowerShellまたはLinux/Macターミナル)
ssh-keygen -t ed25519 -C "your_email@example.com"

# またはRSA方式(互換性がより良い)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

サーバーに公開キーを転送:

# Linux/Macで
ssh-copy-id -p 22022 username@server_ip

# Windows PowerShellで
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh -p 22022 username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

キー認証テスト後パスワード認証を無効化:

# キーで接続テスト
ssh -p 22022 username@server_ip

# 成功したらサーバーでパスワード認証を無効化
sudo nano /etc/ssh/sshd_config
# PasswordAuthentication no に変更

sudo systemctl restart ssh

5. fail2banでセキュリティ強化

5.1 fail2banとは?

fail2banはログファイルを監視して繰り返しログイン失敗を検知し、該当IPを自動でブロックするツールです。SSHブルートフォース攻撃を効果的に防御できます。

5.2 fail2banインストールと設定

# インストール
sudo apt update
sudo apt install fail2ban

# デフォルト設定ファイルをコピー
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 設定編集
sudo nano /etc/fail2ban/jail.local

SSH保護のための主な設定:

[DEFAULT]
# ブロック時間(秒)
bantime = 3600

# 監視時間ウィンドウ
findtime = 600

# 最大失敗回数
maxretry = 3

# ブロックから除外するIP(自分のIP)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

[sshd]
enabled = true
port = 22022  # SSHポートに合わせて変更
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
# fail2ban開始と有効化
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

# 状態確認
sudo fail2ban-client status
sudo fail2ban-client status sshd

# ブロックされたIP確認
sudo fail2ban-client get sshd banned

# 特定IPのブロック解除
sudo fail2ban-client set sshd unbanip 123.456.789.0

6. WireGuard VPNサーバー構築

6.1 VPNが必要な理由

VPN(Virtual Private Network)を使用すれば、外部から接続する時まるで自宅の内部ネットワークにいるかのように全てのサービスにアクセスできます。個別にポートを開けなくても良いのでセキュリティも向上します。

WireGuardは最新のVPNプロトコルで、設定が簡単で速度が速く、セキュリティ性能に優れています。OpenVPNよりはるかに軽量でモダンです。

6.2 WireGuardサーバー設定

# WireGuardインストール
sudo apt update
sudo apt install wireguard

# サーバーキーペア生成
cd /etc/wireguard
umask 077
wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey

# キー確認
sudo cat privatekey
sudo cat publickey

サーバー設定ファイル作成:

sudo nano /etc/wireguard/wg0.conf
[Interface]
# サーバーのVPN内部IP
Address = 10.0.0.1/24
# サーバーの秘密鍵
PrivateKey = サーバー_秘密鍵_内容
# WireGuardポート
ListenPort = 51820
# パケットフォワーディング設定
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# クライアント1の公開鍵
PublicKey = クライアント_公開鍵
# クライアントに割り当てるIP
AllowedIPs = 10.0.0.2/32

IPフォワーディング有効化:

# IPフォワーディング設定
sudo nano /etc/sysctl.conf
# net.ipv4.ip_forward=1 のコメントを解除

# 適用
sudo sysctl -p

WireGuard開始:

# インターフェース開始
sudo wg-quick up wg0

# 状態確認
sudo wg show

# 起動時に自動開始
sudo systemctl enable wg-quick@wg0

6.3 クライアント設定

クライアントキー生成(サーバーで):

wg genkey | tee client_privatekey | wg pubkey > client_publickey

クライアント設定ファイル:

[Interface]
PrivateKey = クライアント_秘密鍵
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = サーバー_公開鍵
Endpoint = your.ddns.domain:51820
AllowedIPs = 0.0.0.0/0  # 全トラフィックをVPNへ
# または AllowedIPs = 192.168.1.0/24, 10.0.0.0/24  # 特定ネットワークのみ
PersistentKeepalive = 25

WireGuard公式アプリはWindows、Mac、iOS、Androidすべてで使用可能です。設定ファイルをインポートするか、QRコードで簡単に設定できます。

7. ファイアウォール設定

7.1 UFW基本設定

UFW(Uncomplicated Firewall)はUbuntuのデフォルトファイアウォールツールです。簡単なコマンドでファイアウォールルールを管理できます。

# UFW状態確認
sudo ufw status

# デフォルトポリシー設定
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH許可(ポート変更時は該当ポートで)
sudo ufw allow 22022/tcp

# HTTP/HTTPS許可
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# WireGuard許可
sudo ufw allow 51820/udp

# UFW有効化
sudo ufw enable

# ルール確認
sudo ufw status verbose

8. まとめとネットワーク点検チェックリスト

ここまでホームサーバーのネットワーク設定とリモートアクセスについて学んできました。最後に全ての設定が正しくできているか点検してみましょう。

設定完了チェックリスト

  • サーバーに固定IPが割り当てられているか?
  • ルーターで必要なポートフォワーディングが設定されているか?
  • DDNSが正常にIPを更新しているか?
  • SSHキー認証が動作しているか?
  • fail2banが有効化されているか?
  • ファイアウォールが適切に設定されているか?
  • VPN接続が正常にできるか?(オプション)

外部接続テスト

# 外部からSSH接続テスト(モバイルデータなど外部ネットワークで)
ssh -p 22022 username@your.ddns.domain

# ポートオープン確認(外部サービス利用)
# https://www.yougetsignal.com/tools/open-ports/

これで皆さんのホームサーバーはどこからでも安全にアクセスできる状態になりました。次の第4編ではファイルサーバー構築について見ていきます。Sambaを利用したWindows共有、NFS設定、そして効率的なディスク管理方法まで扱う予定です。