前提・注意事項
- さくらのVPSを同一リージョンで複数契約している
- VPS同士をスイッチで繋いでいる
- OSはUbuntu
- ポート開放の話は省略します
単語についての説明
公開サーバー
インターネットに対して直接アクセスすることができるサーバー
内部サーバー
公開サーバーを経由しないとインターネットに接続できないサーバー
つまずいた点1 プライベートIPアドレスの割り当て
これについてはそこまで厄介な話ではなく、/etc/netplan/01-netcfg.yaml
スイッチを設定しているイーサネットアダプターに対してIPアドレスを割り当ててあげるだけのシンプルなお話でした
(前略)
"ens4":
dhcp4: false
addresses:
- 192.168.1.1/24
nameservers:
addresses:
- 127.0.0.1
(前略)
"ens3":
dhcp4: false
addresses:
- 192.168.1.2/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1
私の場合は公開サーバーで内部サーバーに対してDNSを提供して通信を行うようにしている関係上、ネームサーバーが公開サーバーのIPアドレスになっていますが、ここはご自身の環境に合わせて変えて下さい。
最後にsudo netplan apply
でIPアドレスの割り当ては完了となります。
つまずいた点2 内部サーバーがインターネットにアクセスできない
これはただ公開サーバーでこれ叩いただけ。正直解説いらんような気もする
sudo apt-get install iptables-persistent
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
sudo iptables -A FORWARD -i ens4 -o ens3 -j ACCEPT
sudo iptables -A FORWARD -i ens3 -o ens4 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo netfilter-persistent save
sudo netfilter-persistent reload
つまずいた点3 プロキシジャンプで内部サーバーへSSH接続できない
実はこれがものすごく解決に時間かかりまして、原因が分からないまま3日も作業してしまいました。
そもそも公開サーバーからダイレクトにSSHもできなかったので…。
まあこれについてもすっごくばかばかしい話でした。
ListenAddress 192.168.1.2
sshd_config見たらこのListenAddressに、このVPSに割り当てられたグローバルIPアドレスが書かれていて、それに気づいた時は「あ、こいつが原因だったのかよ…」って思いましたね。
そして最後にsudo reboot
で完了です。
sudo systemctl restart ssh.service
で良いんじゃないかと思う人もいるかと思うんですけど、それだとListenAddressが更新されなかった+他にもやってたから一括でアップデートしちゃえ精神で再起動しました。
最後に
まあそもそもこんな面倒なこと、個人レベルでやるほどのことって何やってんだって思うかもしれないんですが、これ実はゲームのサービス用サーバーとデータベースサーバーを分離したくてこんな面倒な作業してたわけでして、そうでもなければこんなくそめんどくさいことしたいなんて考えません。
もし私と同じようなことをしようと思って同じことでつまずいた人がいたらこれを参考にしてもらえればと思います。