VagrantでUbuntuサーバ/固定IP/SSHポート変更
Vagrantを使ったUbuntuサーバの初期設定トレーニングシリーズ、前回の続きです。
現在の環境:Vagrant 1.5.0, Ubuntu Server 12.04 64bit
まずVagrantで使用開始するのに最低限必要な、openssh-serverをインストールして、authorized_keys(アクセス権600)を.ssh(アクセス権700)に保存したところでBase Boxをつくりました(ついでにVirtualBoxのGuest Additionもビルド)。
前回は、デフォルトのエディタをvim-noxにして、設定ファイルの変更を管理するetckeeper・git・tigのインストール、時刻を合わせるNTPのインストールまで済ませました。
今回のテーマは
というサーバの初期設定の基本中の基本なのですが、Vagrant環境ではこれが無理ゲーっぽい。
一般的なIP固定の方法は、使えないことはないまでも、ややこしくなりがちです。
一般的でない、Vagrant固有のIP固定は、Vagrantfileを
config.vm.network :private_network, ip: "192.168.33.10"
# config.vm.network :public_network
というように書き換えて、vagrant reload
するだけです(アドレス部分は、LANのルータなどが配布するアドレスではなく、ホストOSとの間だけで成立する接続用のアドレスになります。たぶんVagrantfileのデフォルト値でOK)。
なので、ここでは設定ファイルの書き方をメモするだけにして、実際にはファイルに触れないでおきます。
SSHポート変更は、Vagrantのドキュメントでは(ゲストOSのsshポートを12345に変更したら)Vagrantfileで
config.ssh.port = 12345
とすればよい、と書かれているのですが、どうもVagrantfileを無視して22に接続しようとするみたいです。
通常、Ubuntuサーバの/etc/ssh/sshd_configのポートを指定する箇所で、受付ポートを複数指定できるのですが、22以外の受付ポートを書き込むと、vagrant up
(ないしreload
)ができなくなります。
VirtualBoxの「プレビュー」画面では立ち上がっているのですが。
そんなわけで、今回の記事はあくまでもUbuntuサーバ初期設定のメモで、Vagrant環境ではスルーするポイントになりそうです。
(このへんの問題の対処の仕方を知っている方、ご教示くださると幸いです)
IPアドレスの固定
サーバには、固定IPアドレスが設定されているのが普通です。
ちなみに固定せずに、DHCPクライアントとして動かすには、dhclient
コマンドを使います(このVagrant関連の記事のとおりに構築してきたならば、すでにDHCPクライアントとして動いています)。
$ tail /var/log/syslog
vagrant起動直後にログをみると、dhclientがIPアドレスを取得しているのがわかります。
$ sudo dhclient eth0
でeth0インターフェイスにIPアドレスを取得できますが、vagrantではNATで使用中なので、はねられます。eth1はホストオンリーアダプタで使用中なのではねられます(上述した:private_networkの設定をしている場合)。
$ sudo dhclient -r eth1
でeth1のIPアドレスを開放してDHCPクライアントを終了できます。
Ubuntuで固定IPアドレスを設定するには/etc/network/interfacesを編集します。
$ cd /etc/network
$ sudo cp interfaces interfaces.org
ですでに存在するファイルのバックアップをとっておきます。
$ sudo vi interfaces
でファイルの内容を読むと、Vagrantがいろいろと設定しているのがわかります。
先に述べたように、Vagrant環境では「有効なEthernetインターフェイスがひとつだけ」という状況ではないので、このままVagrant環境のファイルに適用しないで下さい。
# The primary network interface
auto eth0
iface eth0 inet dhcp
最初のアダプタ(eth0)に関する記述はこうなっていると思います。
意味は、ifup -a
コマンドの実行時(つまり起動時)に(auto)、eth0がTCP/IPを利用し(inet)、動的にIPアドレスを取得(dhcp)、という感じです。
実運用サーバでは次のように書き換えます(例):
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-servers 127.0.0.1
dns-search hatenablog.com
アドレス部分は、LANであればルータなどが配布する範囲でまだ使用されていないアドレスを割り当てます。
上記の例では、LANのルータが192.168.1.1で、192.168.1.20を取得しています。
LANならDNSサーバの記述は無しか(上記は自分自身へのループバックアドレス)、もしくは8.8.8.8 8.8.4.4
(GoogleのパブリックDNS)にします。
ドメインネームdns-serach
の記述は、ここではホスト名の検索にhatenablog.com
を補うようにしている例です。
すでに利用IPアドレスが決められている公開サーバならifconfig
とroute
でIPアドレス・ネットマスク・ブロードキャストアドレス・デフォルトゲートウェイを表示してメモしておけばよいかと思います。
ホスト名などを変更している場合は、/etc/network/interfacesに加え、/etc/hostnameと/etc/hostsも書き換えます。
$ cd /etc
$ sudo vi hostname
www.hatenablog.com
$ sudo vi hosts
192.168.1.20 www.hatenablog.com
/etc以下のファイルを変更したときは、
$ sudo etckeeper commit
しておきましょう。
なお、伝統的には/etc/resolv.confを編集してDNSリゾルバを設定しますが、Ubuntuではこれが禁止されています。
$ sudo vi /etc/resolv.conf
で開くと、「編集するな。編集しても上書きされるぞ」と書いてあります。
Ubuntuではresolvconf
コマンドで自動的にresolv.confが生成されることになっています。
resolveconf
コマンドは、/etc/network/interfacesにdns-nameserversやdns-searchが記述されてからifup
コマンドが実行されると(それはたいてい再起動時ですが)、自動的にresolv.confの更新を行います(じっさいには/run/resolveconf/resolv.confへのシンボリックリンクになっています)。
SSHポートの変更
これも、Vagrant環境ではやらないほうが無難な気がします(これをやると、vagrant up
ができなくなりますが、PuTTYなどでの接続はできます)。
デフォルトのSSHポートは22になっていますが、そのままだとブルートフォース攻撃の対象になります(その前にUFWなどのファイアウォールで保護すべきですが、次回に回します)。
また、下二桁が22のポートも狙われるので、1022・10022・2222なども避けるべきです。
ここでは12345に設定する例:
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
$ sudo vi /etc/ssh/sshd_config
Port 12345
$ sudo etckeeper commit
ssh port 22 => 12345
$ cd /etc
$ sudo tig
設定を変更したら、sshを再起動します:
$ sudo service ssh restart
待ち受けポートの確認をします:
$ sudo ss -lpn | grep sshd