グローバルIPの割り当てがないネットワークで外部から接続してみる
私の住んでいる家は、マンションでマンションの共有回線が各戸室に分配されており、一つのグローバル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
インストール中に、Yes
かNo
か選択する画面が出るかもしれないですが、全てYes
でEnter。
インストールが完了すると、/etc/iptables/rules.v4
と/etc/iptables/rules.v6
が作成されています。これで永続化は完了です。おつ
終わり
試しに、VPSのIP:ポート番号でアクセスしてみて、ちゃんと接続できるか確認してみてください。
接続できたら成功です!
私の場合、iptabelsの設定の永続化で苦戦してましたが、なんとかできました。
では、また次回。
Discussion