徒然なるままに プログラミングメモや日々の生活などつれづれとつづっていくblog

2016年10月28日

Docker + PowerDNS + Sqlite + PowerDNS AdminでDNSサーバーを作る

Filed under: Docker,ESXi,OSS,オープンソース — タグ: — ranpei @ 12:00 AM

内部ツール系サーバーを構築するに当たり

内部DNSサーバーにはBindでは無くPowerDNSを使用していきます。

 

PowerDNSを使うことにしたのは単にGUIツールが存在しており

ファイルをいじって設定する手間が省けるな~とおもたっからですw

 

1.Dockerイメージを作成する

管理するドメインは大した量ではないのでDBにはSqliteをチョイス

管理GUIはSqliteに対応した物が無いため、API駆動のPowerDNS Adminを選んでみました。

PowerDNS + SqliteのDockerイメージは見つかったものの、

PowerDNS AdminのDockerイメージは見つからないし・・・・

そもそもこれぐらいならひとまとめにしてもいいじゃない!

ってことでPowerDNS + Sqliteをベースに自分で作ってみました。

[github]

PowerDNS Adminが80番ポートを使用するため、

PowerDNS標準のWebサーバーが8080番ポートに変更になっています。

また、内部運用するに当たり「DNSフォワーダ」の設定が追加されたので

管理外ドメインの問い合わせを外部にフォーワードしてくれます。

2.Dockerコンテナを起動する

[shell]
$ git clone https://github.com/gittrname/powerdns-sqlite3-gui.git
$ docker build -t powerdns-sqlite3-gui powerdns-sqlite3-gui
$ docker run -p 53:53/tcp -p 53:53/udp -p 80:80 powerdns-sqlite3-gui
[/shell]

起動したらブラウザでGUIにアクセスしまずは管理用アカウントを新規に作成してください。

powerdnsadmin%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e7%94%bb%e9%9d%a2 powerdnsadmin_%e3%82%a2%e3%82%ab%e3%82%a6%e3%83%b3%e3%83%88%e7%99%bb%e9%8c%b2

作成したアカウントでログインしたらドメインを追加しレコードの設定を行います。

powerdnsadmin_%e3%83%80%e3%83%83%e3%82%b7%e3%83%a5%e3%83%9c%e3%83%bc%e3%83%89 powerdnsadmin_%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e8%bf%bd%e5%8a%a0

digコマンドで動作の確認ができればDNSサーバーの構築は完了です。

[shell]

$ dig www.ranran.mydns.jp @[DNSサーバーのIP]

; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.ranran.mydns.jp @[DNSサーバーのIP]
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35567
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1680
;; QUESTION SECTION:
;www.ranran.mydns.jp. IN A

;; ANSWER SECTION:
www.ranran.mydns.jp. 3600 IN A [対象サーバーのIP]

;; Query time: 43 msec
;; SERVER: 192.168.11.102#53(192.168.11.102)
;; WHEN: Thu Oct 27 23:59:11 JST 2016
;; MSG SIZE rcvd: 64

[/shell]

2016年10月5日

CentOS 7.2でDocker環境構築

Filed under: Docker,ESXi,Linux,OSS,PC — ranpei @ 9:22 PM

内部ツール系サーバーは CentOS 7.2を使って構築していきます。

外部と別ディストリビューションを使うのに特に理由はありません。

単に私がいろいろなディストリビューションを触りたいというだけですw

 

 

1.Dockerをインストール

[shell]
// Dockerをインストール
#yum -y install docker
// サービスを起動
#systemctl start docker
#systemctl enable docker
// 動作確認
#docker run hello-world
[/shell]

2.Docker-Composeのインストール(最新版はここを参照)

こちらにもDocker-Composeをインストールしておきます。

[shell]
#curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > docker-compose
#chmod +x docker-compose
#sudo mv ./docker-compose /usr/local/bin/docker-compose
[/shell]

あとselinuxが有効な状態だとマウントしたvolumeに書き込むことができないので
selinuxを無効化しておきます。

[shell]
#vi /etc/selinux/config
SELINUX=enforcing

SELINUX=disabled
[/shell]

再起動すれば設定が反映されます。

こちらもすんなりいきましたね。

Ubuntu 16.04でDocker環境構築

Filed under: Docker,ESXi,Linux,OSS,PC — ranpei @ 9:22 PM

外部公開ツール系サーバーはUbuntu Server 16.04 LTSで作成し、

複数コンテナの管理をやりやすくするためにDocker-Composeをインストールします。

※ Ubuntuのインストールは省略

1.Dockerのインストール (ここを参照)

[shell]
// 最新パッケージをインストール
$sudo curl -fsSL https://get.docker.com/ | sh
// 一般ユーザに"docker"グループの追加
$sudo gpasswd -a {ユーザー名} docker
// ログアウト
$exit
[/shell]
再度ログインして以降の手順を実施
[shell]
// Dockerサービスを起動
$sudo service docker start
// 動作確認
$docker run hello-world
[/shell]

2.Docker-Composeのインストール(最新版はここを参照)

[shell]
$curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > docker-compose
$chmod +x docker-compose
$sudo mv ./docker-compose /usr/local/bin/docker-compose
[/shell]

自宅サーバーをDockerで再構築する

Filed under: Docker,ESXi,GitLab,Linux,OSS,PC — ranpei @ 3:08 AM

なかなか長続きしないものですね。。。

まあだらだら日記を書くよりもできるだけ有益な情報のみを書く方針なので

ネタがなかったってだけなんですがね・・・・

 

さて、今回は自宅サーバーをDockerを使って再構築した話を複数回にわたって書いて行こうと思います。

(後ろの方はDocker要素ほとんどないかと思いますがw)

 

1.Dockerで再構築しようと思った訳

Linuxのお試し用にVMを作ろうと思ったらメモリ残量がほとんどないことに気が付きまして・・・

サーバーリソース量

稼働中のVMを調べてみたところ各VMに設定しているメモリ量の合計が搭載メモリ量カツカツな状態でしたw

にもかかわらずVM内部では確保したメモリは半分も使用されていないという状況・・・

各VMのメモリ使用量

Dockerを使えば確保するメモリ量を減らし、なおかつサーバーリソースを有効に利用できるのでは?

と思い立ったのがきっかけです。

 

2.サーバー構成を考えてみる

現在実運用中のサーバーは以下の図のようになっています。

現行サーバー構成図

  • ゲートウェイサーバー
    • インターネットからの入口に置かれ内部サーバーとの中継役を担うサーバー
    • Webサイト高速化のためにキャッシュ役も担う
  • アプリケーションサーバー
    • 実際のアプリ運用を担当するサーバー
    • ブログやCMSなど様々なアプリが同居している
  • データベースサーバー
    • 文字通りデータベースサーバー
  • Gitlab運用サーバー
    • GitlabやJenkinsなど開発サポート用のツール類を運用するサーバー
    • 内部利用が主のため基本的に外部に解放しない
  • メールサーバー
    • プライベートメールアドレスなどの運用を行うサーバー
    • アプリ運用中の通知メールなどを外部に送信する際に使用される

 

これをDockerを使って以下のように2台のVM内に集約してしまおうと画策してみました。

想定サーバー構成図

  1. ゲートウェイサーバー、アプリケーションサーバー、データベースサーバー、メールサーバーを集約
  2. 1アプリを1コンテナとして、蓄積データは個別のデータコンテナに保存することで永続化

が!しかし!?

結局想定通りにはいかず・・・・

以下の図のようになりました。

最終サーバー構成図

  1. メールサーバー、VPNサーバーはDocker化できず仕方なく通常のVMのまま運用・・・
  2. データコンテナはアプリによって保存がうまくいかないためデータボリューム方式に妥協・・
  3. 図では分かりにくいですがGitlabは永続化すらできていませんw

 

3.想定通りにいかなかった理由

自身のDockerへの理解不足などもあったためですが、個別にうまくいかなかった分けをつらづらと・・・・

  • メールサーバー

Linuxユーザーを作成して、各自の個人ディレクトリにメールを保存するという現状運用がDockerにミスマッチでした。

特に複数のユーザーアカウントをどのように永続化するか課題となり移行を断念。

おそらくですが複数ユーザーで運用する場合はユーザーアカウントはLDAPなどで一元管理して、

バーチャルメールボックス方式での運用となるのではないでしょうか?

  • VPNサーバー

構成自体はfrosquin/softetherを使って簡単に構築できたのですが、以下の2つの問題が発生。

1.DockerホストのVMにsshでログインできない

2.DockerホストのOSが64bitだったため「Softether VPN 経由でVMware vSphere Clientが開かない」の内容が再発してしまった

そのためリモート管理に支障を期すのでDocker化は断念し、

Dockerホストの環境を汚さないように別建てでVPN専用サーバーを建てるにしました。

  • Gitlab

PostgreSQLやWebサーバー等が1コンテナにまとまった物を使ったためコンテナ内で複数のデーモンが読み書きを行っており

DockerのVolumeのアクセス権限の問題について」の問題がネックとなって永続化は断念しました。

データの保全はGitlabのバックアップ機能を使って定期的にバックアップ作成し、Dockerホストにコピーして対応しています。

(今回、私は横着して1つにまとまった物を使用しましたが

Gitlabを運用する場合はデータベースサーバーやWebサーバーなどを個別に建てるのが正解だと思います)

 

4.最後に

一応移行自体は終わって1.5GBほどののメモリを確保できましたが、

今後のことを考えるとVPNサーバーはともかく、

Gitlabはバックアップでは心もとないためデータの永続化は必須ですし、

NASや各アプリのアカウント管理も地味に面倒なので、LDAP等で一元管理するようにして

メールサーバーの再構築ぐらいは行いたいですね。。。

では、実際の構築作業等は別記事で!!

2014年9月8日

Softether VPN 経由でVMware vSphere Clientが開かない

Filed under: ESXi,SoftEtther VPN,VPN — ranpei @ 11:30 PM

以前構築したSoftetherのVPN

サーバー構成を変えたため再度構築しなおしたのだが、それ以来VPN経由ではVMware vSphere Clientが開かなくなった・・・・・

正確には、インベントリロードがいつまでたっても終わらずにタイムアウトするのだが
調べても調べても原因がさっぱりわからなかった。

唯一それっぽい情報は
IPアドレスでWeb VMコンソール接続不可
vSphere Clientがインベントリのロード中に接続できないとかぬかす・・・
というもの

ホストの解決ができないか、ルーティングがおかしいのかな???と試行錯誤するもどうにもならず・・・

で、ディストリビューションを変えながら構築してたら、32bitのOSだと開くようになった!?

そういえば構成変更する前のOSは32bitだったな・・・
なんだか腑に落ちない結果になったが、まあ開くようになったのでよしとしよう。

2014年1月13日

SoftEther VPN でVPN環境を構築 (SoftEhter VPN Serverトラブル編)

Filed under: ESXi,SoftEtther VPN,VPN,オープンソース — ranpei @ 2:41 AM

VPN Serverの設定が終わったので、
携帯のデザリングを利用して接続確認をしたのですが接続できませんでした。

ポートの設定などを確認しましたが、とくに問題はなく
vpnserver/server_log内のログを確認すると以下の気になる記述が・・・

[shell]
DHCP サーバーからの IP アドレスの取得に失敗しました。PPP の通信を受諾するためには DHCP サーバ>ーが必要です。仮想 HUB の Ethernet セグメント上で DHCP サーバーが正しく動作しているかどうか確認してください。DHCP サーバーを用意することができない場合は、仮想 HUB の SecureNAT 機能を用いることもできます。
[/shell]

で、調べてみるとSoftEtherVPNのマニュアルから以下の記述を発見
10.3 コンピュータ間VPNの構築 10.3

ここまで来てようやく気付いた・・・
今仮想HubはDHCPサーバーにつながっていない・・・
VPN構成図1

よって、このような構成にする必要があった
VPN構成図2

■OSにブリッジ用Nicの追加
ESXiのVMの設定からNicを1つ追加して以下の設定を行いました。
1.eth1の設定を追加

[shell]
#vi /etc/sysconfig/network-script/ifcfg-eth1
・以下を設定
BOOTPROTO=none
ONBOOT=yes
DEVICE=eth1
TYPE=Ethernet
IPV6INIT=no
IPADDR=0.0.0.0

:wqで保存
[/shell]

※IPADDRが0.0.0.0であることがミソのようです

2.ネットワークを再起動

[shell]
#service network restart
[/shell]

エラーなく起動すればOK

■VPN Serverのローカルブリッジを設定する
ローカルブリッジの設定からローカルブリッジを追加します。
設定は割愛。

それでも接続できず・・・・
途方に暮れていたときこちらの記事を発見「[SoftEther VPN] リモートアクセスVPNの設定 (2/4) – NICの追加
なるほど「プロミスキャスモードに対応したLANカード」が必要と、
でEsxiでそれをやるには「無差別モード」を許可すればいいのね・・・

というか、うちと同じような構成で構築しているうえに、手順がわかりやすい・・orz
もっと早くにこの記事にたどり着けていればよかったですね・・・

記事にならって「無差別モード」を許可したネットワークを新たに追加して、
それをブリッジ側のNicに設定したところうまく動作しました。

これでSoftEtherVPNを使ったVPNが構築できました。

SoftEther VPN でVPN環境を構築 (SoftEhter VPN Server設定編)

Filed under: ESXi,SoftEtther VPN,VPN — ranpei @ 1:30 AM

前回に引き続きSoftEther VPNの設定を行っていきます。
設定に関する詳細な手順は省きますが、やることは以下の2つ

 ・ルーターのポート開放
 ・SoftEther VPN Serverの仮想Hubおよびユーザ、グループの設定

■ルーターのポート解放
SoftEther VPN Serverの設定内容によりますが、以下のポートを開放します

ポート番号 TCP/UDP 用途
443 TCP デフォルトのリスナーポート(HTTPSポート)
500 UDP L2TPのポート(L2TP over IPsecを利用する場合必要)
992 TCP デフォルトのリスナーポート(telnetポート)
1194 UDP OpenVPNリスナーポート(OpenVPNサーバー機能を利用する場合必要)
1701 UDP L2TPのポート(暗号化されていないL2TPを利用する場合必要)
4500 UDP L2TPのポート(L2TP over IPsecを利用する場合必要)
5555 TCP デフォルトのリスナーポート
8888 UDP デフォルトのリスナーポート

どのポートを開放すべきかは各自の利用構成に合わせてください。
私の場合443番はWebサーバーが使用しているため設定していません。

また当然ですが、サーバー側のファイアーウォールの設定をお忘れなく!

■SoftEther VPN Serverの仮想Hubおよびユーザ、グループの設定
SoftEther VPN では仮想Hubごとにユーザ、グループを持っているので、
仮想Hubを作成したのちユーザを作成します。

設定方法などは結構簡単なので割愛します。

結構すんなり設定も終わりいざ接続テストという段階になってみごとにはまりました;;;;
SoftEther VPN でVPN環境を構築 (SoftEhter VPN Serverトラブル編)

SoftEther VPN でVPN環境を構築 (SoftEhter VPN Serverインストール編)

Filed under: ESXi,SoftEtther VPN,VPN — ranpei @ 1:19 AM

今までルーターに付属していた機能でVPNを構築していましたが、
性能などの面で使い勝手が悪かったので、自宅のサーバーを使ってVPNサーバーを構築することにしました。

そして、当然のごとくはまりました;;;;
そのメモです。

まず今回構築する環境ですが。
・サーバーOS:Vine Linux 6.1
・VPNサーバーソフト:SoftEther VPN Server 4.0

ちなみにこれはEsxi5.5上で動作している仮想サーバーです。
(このESXi上というのが最初のはまりポイントでした。)

■SoftEhterVPNServerのインストール

まず、SoftEhterVPNServerをインストールします。
1.SoftEtherVPNServerをダウンロードサイトからダウンロードします。

2.ダウンロードファイルを展開する
[shell]
# ダウンロードファイルを/usr/localに移動する
#mv softether-vpnserver-v4.03-9411-rtm-2014.01.07-linux-x64-64bit.tar.gz /usr/local/.
# 展開する
#tar zxvf softether-vpnserver-v4.03-9411-rtm-2014.01.07-linux-x64-64bit.tar.gz
[/shell]
展開すると「vpnserver」というフォルダができます。

3.ビルドする
[shell]
# 展開してできたフォルダに移動
#cd vpnserver
# ビルドする
#make
[/shell]
makeを実行すると、利用規約に承認するかの表示が出ますので
画面の指示に従って承認してください。

4.vpnserverを起動する
[shell]
#./vpnserver start
[/shell]

ざっくりと書きましたがインストールはこれで終了です。
詳しくはSoftEther VPNの導入マニュアルをご覧ください。

次は管理ツールを使ってサーバーの設定を行っていきます。
SoftEther VPN でVPN環境を構築 (SoftEhter VPN Server設定編)

2013年10月23日

VMDKファイルのコピーに失敗する

Filed under: ESXi,PC — ranpei @ 3:21 AM

ESXiアップデート時に起こった問題
「なぜかコピーできないVM(しかもこれがメインサーバーのVM)」
実はこれが一番原因を探るのに時間がかかりました。


・vSphere Client上でコピーしてもダメ、
・cpコマンドでコピーしてもダメ
・vmkfstoolsコマンドでクローンを移行先HDDに作ろうとしてもダメ


オプションをあれこれ変えながらいろいろ試行錯誤しましたが、どうにもならずギブアップ・・・
(コピーに時間がかかる上エラーとなるのが99%になったあたりだった)


結局、入れ替え先HDD上にVMを新規に作りそこに旧サーバーの設定やらDBデータやらを持っていく
いわゆる「サーバーの立て直し」することにしまいした。




立て直したサーバーは前のサーバーと同じvine linux 4.1 だったこともあり
以下の流れで結構すんなり移行することができました。
1. ユーザの移行
  ユーザ数が少なかったので新サーバーに手動でユーザを作り
  旧サーバーのユーザフォルダをガバーとコピーしてやりました。

2. mysqlのインストールと設定ファイルのコピー

3. 旧サーバーからmysqのデータをエクスポート→新サーバーにインポート
  mysqldumpコマンドで全データをエクスポート→インポート

4. apacheの設定ファイルと公開しているサイトのファイルをコピー

5. 新サーバーのIPアドレスを旧サーバーのものに変更する
  これが終われば速やかに旧サーバーは停止します


うちはWebサーバー以外立てていなかったためこれだけで済みましたが、
他にも色々なサーバーを立てている人は各サーバーの移行が必要でしょうね。


今回の「サーバーの立て直し」は苦肉の策、最終手段というところです。

ESXi 5.5 容量は問題ないのにコピーできない

Filed under: ESXi,PC — ranpei @ 3:21 AM

さて、前回のESXiアップグレード時に起こった問題の1つ
「容量は問題ないのに容量オーバーとなりコピーできない。」についてです。


この問題の原因はRawデバイスマッピング(RDM)したHDDでした。


[shell]
/vmfs/volumes/524d5df7-3408bde8-5d18-d4ae52ca3c1d/windows7 # ls -l
total 43148312
-rw——- 1 root root 2000398934016 Oct 4 13:47 WDC_WD20EARX2D00PASB0-rdmp.vmdk
-rw——- 1 root root 539 Oct 5 18:22 WDC_WD20EARX2D00PASB0.vmdk
-rw——- 1 root root 132120576 Oct 5 16:39 vmx-windows7-1955177614-1.vswp
-rw——- 1 root root 1073741824 Oct 5 16:39 windows7-7489a48e.vswp
-rw——- 1 root root 27 Oct 3 15:30 windows7-f185cab4.hlog
-rw——- 1 root root 42949672960 Oct 22 17:20 windows7-flat.vmdk
-rw——- 1 root root 8684 Oct 20 15:51 windows7.nvram
-rw——- 1 root root 495 Oct 5 18:22 windows7.vmdk
-rw——- 1 root root 0 Oct 3 12:08 windows7.vmsd
-rw——- 1 root root 3658 Oct 22 09:46 windows7.vmx
-rw——- 1 root root 0 Oct 5 16:39 windows7.vmx.lck
-rw——- 1 root root 3937 Oct 5 18:23 windows7.vmxf
-rw——- 1 root root 3659 Oct 22 09:46 windows7.vmx~
[/shell]
上記の「WDC_WD20EARX2D00PASB0-rdmp.vmdk」がRDMしたvmdkです。
御覧の通りRDMしたHDDは見掛け上マウントしたHDDと同じ容量となっています。


どうやら、この見掛け上の容量が問題でコピー時に容量オーバーとなっていたようなのです。


vShere Client上でのデータコピー、SSH接続でcpコマンドを使用したコピーなどの方法を試しましたが
すべて容量エラーでコピーに失敗してしまいました。。。


結局入れ替え先のHDDにRDMのvmdkを新しく作ることにして移行しました。


備考ですが、ESXiでRMDを作成する方法はこちらをご覧ください。
vSphere(ESXi)でSATAディスクをRDMで使う

Older Posts »

Powered by WordPress