😎

自宅のサーバーを別拠点のサーバーにOpenVPNで接続させて、SOCKS5プロキシ経由で自宅内の端末からアクセスできるようにする

2024/12/08に公開

はじめに

最近VPNを契約して、全部の端末をそのVPNに常時接続させています。プライバシー重視のサービスを選んだので安心です。
ただ、私の場合はここで問題が生じます。友人が私に貸し出してくれているサーバーがあるのですが、セキュリティーの関係でOpenVPNを使って接続しないとアクセスできません。アクセスするだけ切り替えればいいのですが、いちいちやるのは面倒ですし出来ればつなぎっぱなしにしておきたいです。さあどうしましょう...

自宅のサーバーにOpenVPNとDante(Socks Proxy)をぶち込む

家に使っていないサーバーがあったので、そいつを踏み台サーバーとして使うことにします。

OSはUbuntu 20.04です。

【OpenVPN】インストール+設定

とりあえずaptでインストール。

sudo apt install openvpn

そして、OpenVPNの設定ファイルを何らかの方法で入手しお好みのエディタで/etc/openvpn/client.confに記述。
記述したら再起動。

sudo systemctl restart openvpn@client.service

多分つながってるはず。念のためipを確認

curl ifconfig.me

無事成功していれば次へ

【Dante】インストール

Dantedとか、Sockdとか、色々言い方あるっぽい?
とりあえずインストール。aptからインストールもできますが、今回はビルドします。

gccmakeがない場合はインストール。

sudo apt install gcc make

以下に従ってビルド。

# ダウンロード
wget https://www.inet.no/dante/files/dante-1.4.3.tar.gz
# 解凍、ディレクトリ移動
tar xzvf dante-1.4.3.tar.gz
cd dante-1.4.3
# Make
./configure
sudo make
sudo make install

sockd -vでバージョンが表示されればok。

【Dante】設定

systemdに登録するファイルを記述。

/etc/systemd/dante.service
[Unit]
Description=SOCKS (v4 and v5) proxy daemon (danted)
Documentation=man:danted(8) man:danted.conf(5)
After=network-online.target

[Service]
Type=simple
PIDFile=/run/danted.pid
ExecStart=/usr/local/sbin/sockd -f /etc/sockd.conf
ExecStartPre=/bin/sh -c ' \
    uid=`sed -n -e "s/[[:space:]]//g" -e "s/#.*//" -e "/^user\\.privileged/{s/[^:]*://p;q;}" /etc/danted.conf`; \
    if [ -n "$uid" ]; then \
        touch /var/run/danted.pid; \
        chown $uid /var/run/danted.pid; \
    fi \
    '
PrivateTmp=yes
InaccessibleDirectories=/boot /home /media /mnt /opt /root
ReadOnlyDirectories=/bin /etc /lib -/lib64 /sbin /usr
DeviceAllow=/dev/null rw

[Install]
WantedBy=network-online.target
sudo systemctl enable dante.service && sudo systemctl start dante.service

Danteの設定ファイルを記述。

/etc/sockd.conf
internal: 0.0.0.0 port = 1080
external: eth0
socksmethod: none
clientmethod: none

client pass {
  from: 0.0.0.0/0 to: 0.0.0.0/0
  # log: connect disconnect
}

socks pass {
  from: 0.0.0.0/0 to: 0.0.0.0/0
}

再起動

sudo systemctl restart dante.service

エラーが出なければok。
別端末を用意して接続テスト。

curl -socks5-hostname ipaddress:1080 https://ifconfig.me/

レスポンスが正常に返ってきていればok。これでお好きな家庭内の端末からSOCKSプロキシを経由して別拠点に接続できます。

【おまけ】WindowsでsshにSOCKSプロキシを使う場合の.ssh/configの設定

.ssh/config
Host meruru_sv1
  HostName 接続したいip
  User meru
  ProxyCommand "C:\Program Files\Git\mingw64\bin\connect.exe" -S proxyのip:1080 %h %p

Git for Windowsが入っていれば使える方法です。Zenn.devに辿り着いている開発者の中で入っていない人は居ないはず...

Discussion