使えるVPN-WireGuard

2025/11/09

WireGuardとVPSで'使える'VPN構築を構築する(LAN,NAT越え)

WireGurdというVPNを実現するアプリがあり、windowsでもlinuxでも使えます。
各マシンにWireGuardを組み込めば、P2PでVPNを実現してくれるスグレモノです。
2020年1月に正式にlinuxカーネルツリーに統合された、比較的新しいものです。
これまでVPNは、多くの人にとって、仕事で使うには有料の選択肢しかなく、無料のものは設定が複雑だったりして、なかなか難しいものでした。

一方、WireGuardも、超えられない壁があります。それは、社内LAN設定やDHCPです。
外部からのパケットが、社内LANを超えてちゃんとそのマシンに入ってくればいいのですが、社内ポリシーでNAT等が認められなかったり、DHCPでIPアドレスが固定でなかったりすると、WireGuardもうまく機能しません。個人利用かIT開発系企業で、自宅と(比較的緩めな)職場を結ぶ程度であれば、いろんな工夫で使えないことはない、という感じだったと思います。
しかし、わずかな課金は必要ですが、第三者の中継サーバーを立てることで、社内LAN、DHCPの壁を越えて、WireGuardを使ってVPNを構築できるような仕組みがあります。

職場PC(複数台OK) →(社内LAN)→ 中継サーバ → 別の場所のPC(他のLAN越しも可) とすることで、立派なVPNが構築できます。

あとは、中継サーバーが必要ですが、インターネット直繋ぎのサーバーを保有している会社であればそれを使えばいいですが、ない場合には、レンタルサーバー会社のVPSが適任です。
私は、さくらインターネットVPSサービスを選択し、最低プランの641円/月で、十分に使えるVPNを構築できました。
(石狩サーバであれば590円/月プランもある)
512MBのメモリということで、スペック的に不安でしたが、やってみたら全く問題ありませんでした。私の用途は、リモートデスクトップです。

それまで私はhamachiやNATでの直繋ぎをしていましたが、スピード的にも遜色ありませんでした*1
もちろん、大人数で使う場合には、中継サーバーの力量が足りなくなることもあるかも知れません。誰か大きな組織の人が試して欲しいです。

ということで、徐々にコンテンツをアップしていきたいと思います。

なお、中継サーバー方式を用いる場合、そのサーバーはVPN専用としてください。他の用途と混在するとセキュリティホールとなる可能性があります*2

*1 : 時間帯によりどれが早いか変わるが、どれも実用に問題ない

*2 : IPフォワーディングを利用しているので

他の構成

企業では拠点間をVPNで結ぶ、ということも多いと思います。下記の記事が参考になります。
Wireguard(その1)&久しぶりにGNS3(その40)

とても参考になります。
さくらのVPSにWireGuard入れて個人用途のVPN環境作った

TPリンクのルーターは、WireGurdで気軽にVPNを構成できるようになっているようです。
WireGuard VPNの設定方法(ルーター)

こちらは自宅サーバーをWireGUardを利用して公開する方法
WireGuardを使って固定IPアドレスが当たっていないお家サーバーにアクセスする

WireGuard技術の解説、ためになります
WireGuardでVPN接続する。

なるほど、こんな使い方もあるのかと。
【Wireguard】VPNクライアント機能があるトラベルルーター2選

linuxからlinuxへのSSH接続

2025/11/09
1. 基本的な SSH 接続

最も簡単な方法は、接続先のユーザー名とホスト名(または IP アドレス)を指定することです。
ssh [ユーザー名]@[ホスト名 または IPアドレス]
2. 秘密鍵を指定して接続する (推奨)

id_ed25519 鍵ペアを使用して接続する方法です。-i オプションで秘密鍵ファイルを指定します。
ssh -i [秘密鍵のパス] [ユーザー名]@[ホスト名 または IPアドレス]
22番ポート以外の場合
ssh -i [秘密鍵のパス] -p (ポート番号) [ユーザー名]@[ホスト名 または IPアドレス]


### 3\. 初回接続時の確認
初めて接続するサーバーの場合、以下のよジが表示されます。
The authenticity of host 'example.com (192.0.2.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 
これは「接続先のサーバーが本物かどうかわかりません。接続を続けますか?」という確認です。サーバーが正しいことを確認した上で `yes` と入力すると、接続が続行され、このサーバーの情報が `~/.ssh/known_hosts` ファイルに保存されます。(次回からは聞かれなくなります)

4. パスフレーズの入力
鍵の作成時にパスフレーズを設定した場合、接続時にそのパスフレーズの入力を求められます。
Enter passphrase for key '~/.ssh/id_ed25519': [ここでパスフレーズを入力]
パスフレーズを入力して Enter キーを押すと、認証が完了し、サーバーにログインできます。

bashコマンド覚え書き

2025/11/06

あるファイル、ディレクトを探す

find /path/to/dir -name filename -type f
オプション
判別式 -type f ファイルのみを対象とし検索する。
判別式 -type d ディレクトリを対象とし検索する。

デバッグ、解析用

そのスクリプトが実行されたか、ファイル名、行数等をログファイルに追記
echo "$(date '+%Y-%m-%d %H:%M:%S') | $(realpath ${BASH_SOURCE[0]}) | Line:${LINENO} | 任意のコメント" >> ~/.usrlog/startlog
本格的には。
#!/bin/bash
# ログ関数の定義
log_write() {
    local comment="$1"
    echo "$(date '+%Y-%m-%d %H:%M:%S') | ${BASH_SOURCE[1]##*/} | Line:${BASH_LINENO[0]} | ${comment}" >> ~/.usrlog/startlog
}

# 使用例
log_write "スクリプト開始"
some_command
log_write "処理1完了"

あるディレクトリ以下に、xxxのワードが入っているファイルを検索

使用例
# カレントディレクトリ以下で"xxx"を検索
grep -r -l "xxx" .

# /home/user以下で大文字小文字を区別せず"xxx"を検索
grep -r -l -i "xxx" /home/user

# 特定の拡張子のファイルのみを検索
find /path/to/directory -name "*.txt" -exec grep -l "xxx" {} ;

# バイナリファイルを除外して検索
grep -r -l -I "xxx" /path/to/directory

grepの主要オプション説明

  • r または --recursive: サブディレクトリも再帰的に検索
  • l または --files-with-matches: マッチしたファイル名のみを表示(内容は表示しない)
  • i: 大文字小文字を区別しない
  • n: 行番号も表示
  • c: マッチした行数を表示
  • w: 単語単位で検索(部分一致を除外)

antiX リポジトリにソフト(xxx)があるかどうかを確認するコマンド:

`apt search xxx`
(これは利用可能なパッケージを検索します。antiXはDebianベースなので、aptコマンドが標準です。事前に`sudo apt update`を実行してリポジトリを更新することをおすすめします。)

antiX そのソフトをインストールするコマンド:

`sudo apt install xxx`
(インストール前に`sudo apt update`を実行し、依存関係を確認してください。)

AlmaLinux 9の場合(RPMベースのシステムで、dnfパッケージマネージャを使用):

リポジトリにインストールしたいソフト xxx があるかどうかの確認コマンド:

`dnf search xxx`
(事前に`sudo dnf makecache`を実行してリポジトリ情報を更新することをおすすめします。)

そのソフトをインストールするコマンド:

`sudo dnf install xxx`
(インストール前に`sudo dnf update`を実行してシステムを最新に保つと良いです。)

antiXのデスクトップセッションを読み解く

2025/11/04

antiXのデスクトップセッション

antiXのGUIの起動ファイル desktop-session を読み解いてみました。
場所は /usr/local/bin/desktop-session です。
これの設定ファイルは、 ~/.desktop-sesshion/desktop-session.conf です。
main() → launch_wm() → min_chek() → launch-desktop &(バックグラウンド起動) ①ここでFM起動 → min_chek() → launch_wm() ②ここでDbus起動+wm起動 → main() → 終わったら、startup を起動
launch-desktopが & 付で実行されているので、バックグラウンド+プロセス化となり、ここで、ファイルマネージャー(File-filter)とウィンドウマネージャー(WM)が「枝分かれ」します。
先にlaunch-desktopプロセスが分離して、そこで①File-filterが起動されるので、これ以降の環境変数を、File-filterは取得することができません。したがって、Dbusアドレスも知ることができません。

なので、日本語入力を設定する際には、この②で実行されるDbusアドレスをROXも知らないと、ROXから起動されたアプリには、Dbusアドレスが伝わらず、日本語入力ができなくなることがあります。

よって、日本語入力を設定する際には ~/.desktop-sesshion/desktop-session.conf の中で、Dbusを先行して起動させ環境変数にセットし、そのあとに実行される②のDbus起動をfalseにしておく、ということです。詳細は、こちら

なんで、こういう構造なのだろう

と思って調べたら、2016年には、指摘されているものの、antiXの中の人は、あえて対応していない、ということのようです。
Dbusセッションは、desktop-sessionが終了したら、同時に終了するというのが理念のようですが、よくわかりません。私はシステム通して、Dbusはユニークであるほうがいいと思うのですが。

もともと、antiXは軽量化のためにDbusがなくても動作するようにしていたので、その名残りみたいなものもあるようですが、昔のことはよくわかりません。

ということで、日本語入力のところで述べた方法も、antiXが想定する設定ではないと思うので、他の部分で不具合がでるかも知れません(わかりません)。

クリップボード履歴-antiX-linux

2025/11/03
antix にはデフォルトで、clipit というクリップボード履歴ソフトがインストールされていますが、機能が限定的です。
copyQというフリーウエアのクリップボード履歴ソフトのほうが使いやすいので、インストールしてみましょう。

インストール
sudo apt update
sudo apt install copyq

# IceWMのstartupファイルを編集
nano ~/.desktop-session/startup

# 以下の行を追加
copyq &
これで再起動しましょう。

LinuxとWindowsのクリップボード挙動の違い

LinuxとWindowsのクリップボードの挙動の違いを理解しておくといいです。

Windowsの感覚でLinuxを操作すると、特に戸惑いやすいのが「コピーしたはずなのにペーストできない」「FIFOのように感じる」といった現象があります。
Linux(正確にはX Window System)が持つ**複数のクリップボード(セレクション)**の仕組みに起因しています。

Windowsのクリップボードは基本的に「1種類」です。`Ctrl+C`(または「コピー」)でデータが格納され、`Ctrl+V`(または「貼り付け」)でそれを取り出します。常に「最後にコピーした1つのもの」だけが保持されます(履歴機能は別として)。

一方、LinuxのGUI環境(X Window System)では、主に2種類のクリップボード(セレクションと呼ばれます)が並行して動作しており、混乱しがちです。

+2種類のクリップボード(セレクション)**

項目PRIMARY (プライマリ)CLIPBOARD (クリップボード)
概要選択即コピー明示的コピー
コピー操作テキストをマウスで選択(反転)した**だけ**で、自動的に格納されます。`Ctrl+C` キーや、メニューから「コピー」を明示的に実行した時に格納されます。
ペースト操作マウスの**中ボタンクリック**で貼り付けられます。`Ctrl+V` キーや、メニューから「貼り付け」を実行した時に貼り付けられます。
Windowsとの対応なし(Linux/Unix特有の文化)Windowsのクリップボードとほぼ同じものです。

+なぜ「FIFO」や「意図しない貼り付け」が起きるのか**

この2つのバッファは**別々に内容を保持しています**。

たとえば、以下の操作をしたとします。
1. ブラウザで「A」というテキストを `Ctrl+C` でコピーします。(`CLIPBOARD` に "A" が入る)
2. 次に、ターミナルで「B」というテキストをマウスで**選択だけ**します。(`PRIMARY` に "B" が入る)

この時点で、`CLIPBOARD` には "A" が、`PRIMARY` には "B" が入っています。
  1. この状態で...
  2. `Ctrl+V` を押すと: `CLIPBOARD` の内容である "A" が貼り付けられます。
  3. マウスの中ボタンをクリックすると: `PRIMARY` の内容である "B" が貼り付けられます。
ユーザーが「最後に操作したのは "B" の選択だから "B" がペーストされるはず」と思って `Ctrl+V` を押すと、古い "A" が出てきてしまい、「FIFOのようだ」「コピーしたはずのBがペーストできない」と感じることになります。
あるいは、無意識に中ボタンをクリックしてしまい、意図しない `PRIMARY` の内容(直前にたまたま選択していたテキスト)が貼り付けられることもあります。

+「プロパティの値」がコピーできない件について**

これはクリップボードの仕組みの問題ではなく、**アプリケーション(GUIツールキット)側の実装の違い**です。
  1. WindowsのUIは、ダイアログボックス内の「プロパティ値」のような静的なテキストラベルでも、比較的コピー操作を許容するように作られていることが多いです。
  2. Linuxのアプリケーション(特にantiXで使われるような軽量なGTK+やQt以外のツールキット)では、それらの値が「単なる表示ラベル」として扱われ、テキストとして選択・コピーする機能が実装されていない場合があります。
これはデスクトップ環境や使用するアプリケーションの設計思想によるもので、Linuxだから一律でコピーできない、というわけではありません(GNOMEやKDEの標準アプリではコピーできることも多いです)。