🔗

グローバルIPの割り当てがないネットワークで外部から接続してみる

2021/09/28に公開

私の住んでいる家は、マンションでマンションの共有回線が各戸室に分配されており、一つのグローバルIPをマンション全体で共有している形になっています。なので、外部から自宅サーバーに接続しようとしてもできません。そのため、以前の記事でVPS上にVPNサーバーを構築し、自宅サーバーを構築したVPNサーバーに接続しています。しかしこれが色々とめんどくさい。。
というのは、家にいるときはローカルIPで接続し、外から接続するときはVPNに接続して、ローカルIPとは別のIPで接続するというめんどくい状態になっています。なので、今回はVPSに割り当てられたIPアドレスで自宅サーバーに接続できるようにしたいと思います。

ネットワーク構成図

主なネットワーク構成図ですが、VPSサーバーと自宅サーバ間にVPNを張り、VPSのIPにアクセスしたら、自宅サーバーに割り当てられているVPN上のIPアドレスに転送する形にします。こうすることで、家でも外でもクライアントがVPN接続する必要がないので、一つのIPに統一することができます。

設定していく。

参考にした記事はこちら

VPNサーバーの構築は別の記事で紹介したので割愛。
実際に設定していく。
適当なディレクトリに移動します。

cd ~/

シェルスクリプトファイルを作成、実行権限を追加します。
777は危険なのでやめておいたほうがいいかも?

sudo touch its.sh
sudo chmod 777 its.sh

スクリプトファイルを編集していきます。(vimでもmicroでも)

sudo vi its.sh # vimの場合
sudo micro its.sh # microの場合
#!/bin/bash
brname=tap_vpn         # Softetherで作成したtap名
braddr=192.168.30.5     # 先程tapに割り当てたIPアドレス
iface=eth0              # NIC名

[[ $(whoami) = "root" ]] || { sudo $0 "$@"; exit 0; }

echo 1 > /proc/sys/net/ipv4/ip_forward

echo "iptableのNAT設定をクリーンアップしています..."
iptables -F -t nat

echo "フォワーディング設定を追加しています..."
iptables -A FORWARD -i ${brname} -s ${braddr}/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

fwd(){
    local ext_port=$1
    local internal=$3
    iptables -t nat -A PREROUTING -i $iface -p tcp --dport $ext_port -j DNAT --to $internal
}

## フォーワード設定
fwd 32145 to 192.168.30.10:22 # 32145に来た通信を192.168.30.10:22に転送(ssh用)
fwd 25565 to 192.168.30.10:25000 # マイクラサーバー用

NAT設定は以上です。
しかし、このままだと再起動したらiptablesの設定がリセットされてしまうので、設定の永続化をしていきます。

# 必要に応じて
# sudo apt update
sudo apt install iptables-persistent

インストール中に、YesNoか選択する画面が出るかもしれないですが、全てYesでEnter。
インストールが完了すると、/etc/iptables/rules.v4/etc/iptables/rules.v6が作成されています。これで永続化は完了です。おつ

終わり

試しに、VPSのIP:ポート番号でアクセスしてみて、ちゃんと接続できるか確認してみてください。
接続できたら成功です!
私の場合、iptabelsの設定の永続化で苦戦してましたが、なんとかできました。
では、また次回。

Discussion