ラベル NiftyCloud の投稿を表示しています。 すべての投稿を表示
ラベル NiftyCloud の投稿を表示しています。 すべての投稿を表示

2023年7月4日火曜日

nifcloud sdk for python でカスタムヘッダを設定する方法

nifcloud sdk for python でカスタムヘッダを設定する方法

nifcloud sdk for python は botocore を使っているので botocore レベルでヘッダをカスタムする必要があります

環境

  • Python 3.11.3
  • nifcloud sdk for python 1.6.0

サンプルコード

from nifcloud import session

def add_custom_header(request, **kwargs):
    request.headers['Custom-Header-1'] = 'Value-1'


class NifcloudClient:
    def __init__(self, region: str, access_key: str, secret_key) -> None:
        # 先にセッションを作成する
        custom_session = session.get_session()
        # 作成したセッションに対して before-send イベントに対してカスタムヘッダを設定するためのハンドラを登録する
        custom_session.register("before-send", add_custom_header)
        # custom_session を使ってクライアントを作る
        self.client = custom_session.create_client(
            "computing",
            region_name=region,
            nifcloud_access_key_id=access_key,  # type: ignore
            nifcloud_secret_access_key=secret_key,  # type: ignore
        )

動作確認したい場合は適当にエコーサーバとかを立てて endpoint_url を設定してリクエストの内容を覗いてみてください

参考URL

2018年6月28日木曜日

ニフクラ VPN をリージョン間で接続するのはそこそこ簡単

概要

ニフクラ VPN よくわからないという場合にとりあえず成功する感覚をつかみたい場合におすすめ (なはず) です
手順は多いですが、とりあえず同じやり方でやればリージョン間で VPN が張れます
今回は east-1 と west-1 でやっていますが別のリージョン間でもおそらく可能だと思います

環境

  • ニフクラコンパネ (2018/06/28 時点)

VPN ゲートウェイの作成

east-1

プライベート LAN 作成 (CIDR: 172.16.1.0/24)
nifcloud_vpn1.png

VPN ゲートウェイ作成
nifcloud_vpn2.png

VPN ゲートウェイの FW 作成
とりあえずプライベート LAN に割り当てた範囲からは全許可しておきます
nifcloud_vpn3.png

完成図
nifcloud_vpn4.png

west-1

同様に west-1 も作成します

プライベート LAN (CIDR: 172.16.2.0/24)
nifcloud_vpn5.png

VPN ゲートウェイ
nifcloud_vpn6.png

FW
nifcloud_vpn7.png

完成図
nifcloud_vpn8.png

お互いの FW にお互いのグローバル IP を許可する

VPN ゲートウェイにはグローバル IP が付与されています
east-1 に作成した VPN ゲートウェイのグローバル IPからの通信許可を west-1 側の FW に追加します
west-1 に作成した VPN ゲートウェイのグローバル IPからの通信許可を east-1 側の FW に追加します

east-1

east-1 (vpngw1 ファイアウォール)
nifcloud_vpn9.png

west-1

west-1 (vpngw2 ファイアウォール)
nifcloud_vpn10.png

カスタマーゲートウェイの作成

そろそろややこしくなってきます
カスタマーゲートウェイは相手側の VPN 機器の情報なので今回であれば双方の VPN ゲートウェイの情報になります

east-1

  • 対向機器 IP アドレスは west-1 の VPN ゲートウェイのグローバル IP
  • 対向機器 LAN 側 IP アドレス帯は west-1 に作成したプライベート LAN の IP 帯
  • 対向機器 LAN 側 IP アドレスは west-1 の VPN ゲートウェイのグローバル IP

を入力します
最後のやつは「あれ?」と思いますが IKE ID として送られるようでその場合はグローバル IP じゃないとダメなのでグローバル IP を指定します

nifcloud_vpn11_2.png

west-1

同様に west-1 にも作成します

nifcloud_vpn12_2.png

VPN コネクションを作成

双方に作成した VPN ゲートウェイに対してコネクションを作成します
VPN コネクションの作成方法がよくわからなかったのですが、VPN ゲートウェイを選択して左下のプルダウンから選択するようです
nifcloud_vpn13.png

east-1

east-1 の VPN コネクション
nifcloud_vpn14.png

事前共有鍵を空にすると自動生成してくれるようです
で、自動生成された鍵をどこで確認するんだろうと思ったらネットワーク一覧から VPN ゲートウェイとカスタマーゲートウェイを結ぶ線をクリックすると VPN コネクションの情報が確認できます
(確認するのが面倒な場合は適当な文字列を自分で決めても OK です)
nifcloud_vpn15.png

ここに表示されている事前共有鍵をコピーしておきましょう

west-1

そして west-1 側に VPN コネクションを作成します
先ほどの事前共有鍵を設定しましょう
nifcloud_vpn16.png

これで双方で VPN を張れば双方のコネクションのステータスが緑になるはずです
nifcloud_vpn17.png

動作確認

一番てっとり早いのはプライベート LAN 上に VM を作成して IP を手動で振ってそれぞれアクセスできるか確認する方法です
てっとり早いといいつつ

  • VM 作成 (プライベート LAN に入れる) -> FW 設定 -> グローバル IP で SSH してプライベート IP を手動で設定

という作業が 2 台分必要になります
操作は割愛しますが成功すると以下のようになります
nifcloud_vpn_demo.gif

またルートテーブルを初めに見せていますが以下のコマンドでルートを追加しています
これがないと通信できません

east-1 側の VM

  • ip r add 172.16.2.0/24 via 172.16.1.1 dev ens192

west-1 側の VM

  • ip r add 172.16.1.0/24 via 172.16.2.1 dev ens192

うーんそれでもダメだなーという場合は FW を全開放にして一度試してみてください

最後に

ニフクラ VPN を使ってリージョン間で VPN を張ってみました
VPN をちょっと試してみたい場合にはいい方法かなと思います

参考サイト

2018年6月11日月曜日

ニフクラ DNS でサブドメインを委譲してみよう

概要

サブドメインの委譲とは簡単に言えば別の DNS サーバでレコードを管理することができる機能です

環境

  • ニフクラ (2018/06/11 時点)

やりたいことは以下の通りです
nifcloud_dns0.png

A 側が委譲する側で B 側が委譲される側です
委譲されたあとは B 側に対して操作することになります

A側: サブドメインを登録する

まずは A 側にサブドメインを登録しましょう
この段階ではまだ登録できません
nifcloud_dns1.png

「登録する」を選択すると次の画面で登録する TXT レコードの情報が表示されるのでメモしておきましょう

B側: TXT レコードを登録する

先程表示された TXT レコードを B 側に登録しましょう
要するに委譲する B 側がちゃんと自分の持ち物であるかチェックします
以下のように登録しましょう
nifcloud_dns2.png

タイプに TXT を選択して値に認証用の文字列を入力します
問題ないなら「確認へ」を選択しましょう
こんな感じで登録されれば OK です
nifcloud_dns3.png

A側: 認証する

あとは先程認証できなかった A 側で認証すれば OK です
「認証処理を実行する」を選択しましょう
ちゃんと B 側の DNS サーバに TXT レコードが設定されていれば以下のように認証完了画面が表示されます
nifcloud_dns4.png

動作確認

あとは A 側に A レコードを追加してみてちゃんと IP が引けるか確認してみましょう
特に問題なく引けると思います

また認証が完了した後は B 側の TXT レコードは削除して OK です

最後に

ニフクラ DNS でサブドメインの委譲やってみました
委譲する側で TXT レコードを設定するだけなので簡単です
今回はニフクラ DNS -> ニフクラ DNS でやりましたが、ニフクラ DNS -> Route53 なども同じやり方でできます

サブドメインは別の DNS で管理するということはよくあるユースケースかなと思います

2017年6月27日火曜日

AWS SDK Ruby を使ってニフティクラウド DNS を操作してみた

概要

久しぶりの連投です
前回ニフティクラウド DNS に A レコードを追加してみました
アプリケーションで使う場合、手動で毎回 A レコードを登録するのは現実的ではありません
ニフティクラウド DNS の API は AWS の Route53 に互換してるらしいので AWS の Ruby SDK を使ってニフティクラウド DNS が制御できるか試してみました

環境

  • CentOS 7.3.1611
  • Ruby 2.3.3p222
  • aws-sdk-v1 1.67.0

事前作業

ニフティクラウド API のアクセスキーとシークレットキーを事前に取得しておいてください
あとはニフティクラウド DNS に適当にゾーン登録しておくと今回紹介する Ruby のサンプルも動くの良いかと思います

ライブラリインストール

執筆時現在 AWS の Ruby SDK には v1 と v2 があります
今回は v1 を使います
ちなみに v1 は duplicated になっているので、普通に AWS を使う場合は v2 を使ってください
また今回のコードは v2 との互換がないので v2 だと動作しないのでご注意ください

  • bundle init
  • vim Gemfile
gem "aws-sdk-v1"
  • bundle install –path vendor/bundle

グローバルにインストールしても良いですが今回はカレントにインストールします

書き換え

実はそのままでは使えません
ニフティクラウド DNS の API バージョンは 2012-12-12N2013-12-16 となっています
AWS の Route53 のバージョンは 2012-12-12 と 2013-04-01 がありますが、どちらもニフティクラウド DNS のバージョンとは異なります
当然 SDK も 2012-12-12N2013-12-16 のバージョンを受けることができないので、このバージョンを受けれるように修正する必要があります

  • vim vendor/bundle/ruby/2.3.0/gems/aws-sdk-v1-1.67.0/lib/aws/route_53/client.rb
class Client::V20121212N20131216 < Client
  define_client_methods('2012-12-12N2013-12-16')
end

で新しいバージョン用の class を作成します
このコードは行数が少ないので書き換えやすいと思います

  • cp vendor/bundle/ruby/2.3.0/gems/aws-sdk-v1-1.67.0/lib/aws/api_config/Route53-2012-12-12.yml vendor/bundle/ruby/2.3.0/gems/aws-sdk-v1-1.67.0/lib/aws/api_config/Route53-2012-12-12N2013-12-16.yml

次にバージョン用の API 定義ファイルを作成します
まず既存のファイルからコピーします
そしてファイルを開いて「2012-12-12」の部分を「2012-12-12N2013-12-16」にすべて置換します

  • vim vendor/bundle/ruby/2.3.0/gems/aws-sdk-v1-1.67.0/lib/aws/api_config/Route53-2012-12-12N2013-12-16.yml
    • %s/2012-12-12/2012-12-12N2013-12-16/

エンドポイントの部分もありますが、これも変更しておきましょう

route53.amazonaws.com -> dns.api.cloud.nifty.com

そして最後に Core のコードを書き換えます
名前からしてかなり行数が長いです
606 行目あたりにある operations メソッドを書き換えます

  • vim vendor/bundle/ruby/2.3.0/gems/aws-sdk-v1-1.67.0/lib/aws/core/client.rb
def operations(options = {})
  if name.match(/V\d{8}$/)
  then
    @operations ||= []
  elsif name.match(/V\d{8}N\d{8}$/)
  then
    @operations ||= []
  else
    client_class(options).operations
  end
end

elsif が追加されています
要するに「2012-12-12N2013-12-16」のフォーマットを受け付けるようにします
これを追加しないと無限ループが起き「stack level too deep (SystemStackError)」が発生します

これで書き換えは完了です
実際に使ってみます

サンプルスクリプト

  • vim dns.rb
require 'aws-sdk-v1'

AWS.config(
           :route_53 => {
             :endpoint => 'dns.api.cloud.nifty.com',
             :api_version => '2012-12-12N2013-12-16'
           },
           :access_key_id => 'your-niftycloud-access-key-id',
           :secret_access_key => 'your-niftycloud-secret-access-key'
)

r53 = AWS::Route53.new

hosted_zone = r53.hosted_zones.find {|z|
  p z.name
}

ゾーンの一覧を取得するスクリプトです

動作確認

  • bundle exec ruby dns.rb –path vendor/bundle/

で実行できます
成功すると登録してあるゾーンの一覧を取得することができます

あとは AWS の Ruby SDK のリファレンスを参考にレコードを登録する関数などを呼び出せば動作すると思います
http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/Route53.html
(と思ったんですが、hosted_zone.rrsets.create を実行してみたら Inappropriate XML でエラーになってしまいました、、、)

最後に

AWS SDK Ruby の v1 を使ってニフティクラウド DNS をコールしてみました
ゾーンの一覧の取得はできたんですが、レコードの登録でつまづきました
たぶん同じように SDK を修正すれば動くようになるとは思いますが、ちょっと辛そうな感じがするのでこれくらいにしておこうと思います

2017年6月26日月曜日

ニフティクラウド DNS にゾーン登録して A レコードで名前解決してみる

概要

適当なドメインを取得してそのドメインをニフティクラウド DNS のゾーンとして登録してみます
その後登録したゾーンに対して A レコードを登録してドメインから IP が引けるか試してみます
今回使用するドメインは無料で取得できるドメインにしました

環境

  • ニフティクラウド (2016/12/25 時点)
    • Region: east-1 (Zone: east-12)

ドメインの取得

ニフティクラウド DNS ではゾーンを登録をする際に認証処理があります
要するにそのドメインがちゃんと自分のものであるかどうかを判断します

今回は whois 認証という方式を使うのですがニフティクラウド DNS の whois 認証で使えるドメインは以下の通りとなっています
http://cloud.nifty.com/spec/dns/dns_zone.htm

ここに記載のドメイン以外で認証することはおそらくできないのでここに記載のドメインを取得してください
今回は無料で取得できる「.tk」ドメインを取得しました

もちろん無料のドメインではなく「お名前.com」などのドメインサービスで取得しても OK です

ネームサーバの登録

取得したドメインのネームサーバを設定します
大抵の場合は取得したドメインサービスの機能でネームサーバを設定することができます
ニフティクラウド DNS の場合認証用のネームサーバ 1 台とリゾルバの 2 台のネームサーバを登録します

niftycloud_dns1.png
※画面は自分が使っているドメインサービスのネームサーバの設定画面です

ここで入力しているネームサーバは次のゾーン登録の手順で表示されるので、それを入力します

ニフティクラウド DNS で認証を行いゾーン登録する

ニフクラコンパネにログインして DNS の画面に進みます

DNS ゾーン管理 -> DNS ゾーン登録

でゾーン名に今回取得したドメインを入力します
niftycloud_dns2.png

すると認証画面になります
ここでネームサーバ 3 台の情報が表示されるのでドメインサービス側の設定でネームサーバを設定してください
niftycloud_dns3.png

そして「認証処理を実行する」をクリックするのですが、DNS の伝搬に少し時間がかかるので待ちましょう
ボタンを押しても伝搬できていない場合は失敗するだけなので、何度もトライすれば OK です
自分の場合 5 分ほどかかりました

で認証が完了するとランダムの文字列が付与されたネームサーバは削除してくださいという旨が表示されるので削除してください
問題なくゾーン登録が出来ると一覧画面に表示されます
niftycloud_dns4.png

A レコードを登録してみる

試しにて自分のサーバをドメインで引けるようにしてみましょう
サーバは何でも OK ですがグローバル IP を持っているサーバが良いかなと思います
登録したドメインを選択し「レコード新規作成」を選択します
タイプを A にし必要な情報を入力していきます
niftycloud_dns5.png

ポリシーには「重み付け」と「フェイルオーバー」の機能がありますがとりあえず今回は 1 台なので特に設定しません
問題なければ確認してレコードを登録します

ニフティクラウド DNS の場合、ゾーン登録は無料です
が、レコード登録は有料で 500円/10レコードになっていました
そして 11 レコード目からの 10 レコードは更に料金が発生します
また、先ほど紹介したレコードのポリシー機能は各レコードを追加する毎に料金が発生するようです
http://cloud.nifty.com/price/ep.htm#dns

とりあえずレコードが登録できれば完成です

動作確認

登録したレコードで IP が引けるか確認してみましょう
かつ、ネームサーバがニフティクラウド DNS のものになっているか確認します
確認は Mac 上の dig コマンドを使っています
また、IP の部分は一部情報をマスクしています

  • dig test.free-registry.tk
; <<>> DiG 9.8.3-P1 <<>> test.free-registry.tk
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65377
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;test.free-registry.tk.         IN      A

;; ANSWER SECTION:
test.free-registry.tk.  86400   IN      A       111.xxx.xxx.xxx

;; Query time: 182 msec
;; SERVER: 192.168.100.1#53(192.168.100.1)
;; WHEN: Mon Jun 26 12:15:19 2017
;; MSG SIZE  rcvd: 55

ANSWER SECTION の部分で登録した IP が引けているのがわかると思います

  • dig free-registry.tk NS
; <<>> DiG 9.8.3-P1 <<>> free-registry.tk NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51457
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;free-registry.tk.              IN      NS

;; ANSWER SECTION:
free-registry.tk.       3600    IN      NS      cdns1.nifty.ad.jp.
free-registry.tk.       3600    IN      NS      cdns0.nifty.ad.jp.

;; Query time: 194 msec
;; SERVER: 192.168.100.1#53(192.168.100.1)
;; WHEN: Mon Jun 26 12:16:50 2017
;; MSG SIZE  rcvd: 85

ANSWER SECTION の部分でニフティクラウド DNS のネームサーバが表示されていることがわかると思います

最後に

ニフティクラウド DNS を使ってドメインから IP が引けるところまでやってみました
ゾーン登録をするのに認証処理が必要なのでハマるとしたらそこかなと思います

スペック表を見る限りレコード数に上限はないので、料金さえ払えば無限にレコードは登録できそうです
一応 API もあるのでこれを使えばプログラムからでもゾーンやレコード登録ができると思います

2016年12月25日日曜日

ニフティクラウド上に VyOS を構築して L2TP/IPsec を使って Mac から VPN 接続してみた

概要

ニフティクラウド上に VyOS を構築して自宅の Mac から L2TP/IPSec を使って VPN 接続してみました
VPN 接続することでニフティクラウド上のマシンが自宅の Mac からローカル IP 接続できるようになります

環境

  • ニフティクラウド (2016/12/25 時点)
    • Region: east-1 (Zone: east-12)
  • ゲスト OS: VyOS 1.1.7 (Public イメージを使用)
  • Mac Book Pro (OS X 10.10.5)
  • Wifi Walker NAD11

完成図

今回の完成図は以下の通りです
自宅側の Mac は WiMAX を使ってインターネットに接続します
WiMAX のグローバル側の IP は固定 IP が理想ですが、動的 IP でも問題ありません
その場合は確認くんなどで事前にグローバル側の IP を調査しておいてください
l2tp_ipsec_vyos_with_mac1.png

プライベート LAN の作成

まずはニフティクラウド側でリソースを作成します
左メニューから「ネットワーク」を選択し「プライベート LAN 作成」から作成します
CIDR は今回完成図にあるように「192.168.0.0/24」にしておきます
ここで設定した CIDR の範囲の IP が自宅の Mac 側にも振られることでクラウド側のサーバと通信できるようになります
l2tp_ipsec_vyos_with_mac2.png

VyOS の作成

次に VyOS をニフティクラウド上に構築します
「サーバー作成」から作成します
ニフティクラウドでは Public イメージとして VyOS の 1.1.7 が公開されているのでこれを使いましょう
l2tp_ipsec_vyos_with_mac3.png

サーバのスペックは small2 くらいあれば OK です
料金プラン、SSH キー、ファイアウォールは適当に割り当ててください
ネットワークの設定でプライベート側は先程作成したプライベート LAN を設定してください
l2tp_ipsec_vyos_with_mac4.png

作成が完了するとプライベート側の IP がまだ設定されていないため警告マークになりますが、手動で設定するので問題ないです

VyOS 上で L2TP/IPSec の設定

では VyOS に SSH ログインして VPN の設定を行います
ログイン用のユーザは vyos になるので注意してください

プライベート IP の設定

まずはプライベート側の IP を設定します

  • configure

で編集モードになり

  • del interfaces ethernet eth1 address dhcp
  • set interfaces ethernet eth1 address ‘192.168.0.1/24’
  • set interfaces ethernet eth1 description ‘vlan’
  • commit
  • save

で静的 IP を付与します
commit ip a show で IP が振られていることを確認してください
コンパネでも警告マークが消え正常になっていると思います

L2TP/IPSec の設定

次に VPN の設定を行います

  • configure

で編集モードになります

IPSec の設定は以下の通りです

  • set vpn ipsec ipsec-interfaces interface eth0
  • set vpn ipsec nat-traversal enable
  • set vpn ipsec nat-networks allowed-network 0.0.0.0/0
  • commit
  • save

L2TP の設定は以下の通りです
xxx.xxx.xxx.xxx の部分はニフティクラウド上に作成した VyOS のグローバル側の IP を記載してください
pre-shared-secret で設定した「TESTSECRET」はどんな文字列でも OK です
あとで Mac から使用するのでメモしておいてください
あと local-users usernamepassword で設定したユーザ名とパスワードも Mac から VPN 接続するときに使うのでメモしておいてください
もちろん好きなユーザ名とパスワードに変更してもらって OK です

  • set vpn l2tp remote-access client-ip-pool start 192.168.0.100
  • set vpn l2tp remote-access client-ip-pool stop 192.168.0.200
  • set vpn l2tp remote-access outside-address xxx.xxx.xxx.xxx
  • set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
  • set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret TESTSECRET
  • set vpn l2tp remote-access authentication mode local
  • set vpn l2tp remote-access authentication local-users username TESTUSER password TESTPASS
  • commit
  • save

start 192.168.0.100stop 192.168.0.200 で指定した範囲から IP を 1 つ VyOS が払い出し VPN 接続に成功したマシンにプライベート IP を付与してくれます

VyOS 用のファイアウォールの設定

ここで WiMAX のグローバル IP からの接続許可をします
固定 IP であればそれを、動的 IP であれば事前に調べておいて IP をファイアウォールに設定します
アクセスプロトコルは今回は Any で実施します
要するに自宅の WiMAX からのアクセスは全許可になれば OK です

また、VPN 接続後にプライベート IP でクラウド上のサーバにアクセスします
ニフティクラウドの場合同一ファイアウォール内にいる場合はプライベート間はアクセスし放題なのですが、今回の場合自宅のマシンからのアクセスなのでファイアウォールにプライベート間の通信の許可ルールを追加する必要があります
なので、プライベート IP からのアクセスも許可しておきます

  • ANY CIDR 192.168.0.0/24
  • ANY IP WiMAX のグローバルIP

上記を IN ルールに許可してください
OUT ルールは特に設定する必要はありません

試しに自宅環境から VyOS のグローバル IP に SSH ログインできるかどうか確認すると良いかと思います

動作確認用のサーバを準備する

これは何でも OK です
適当にサーバを作成してください
一つ条件としては事前に作成したプライベート LAN (vlan) に接続するようにしてください
そしてプライベート IP を手動で設定してください
今回の完成図では「192.168.0.10/24」を設定しました
動作確認用に Apache をインストールして起動しておきます

ここまでできればニフティクラウド上での作業は完了です

Mac を使って VPN 接続して動作確認する

では自宅の Mac から接続してみます
「システム環境設定」から「ネットワーク」を選択します
l2tp_ipsec_vyos_with_mac5.png

ネットワークの一覧の下にある「+」ボタンから新規でネットワークを追加します
作成時にプルダウンでインタフェースの種類を選択できますが「VPN」を選択します
VPN タイプには「L2TP over IPSec」を選択します
l2tp_ipsec_vyos_with_mac6.png

l2tp_ipsec_vyos_with_mac8.png

サーバアドレスにはニフティクラウド上に作成した VyOS のグローバル IP を入力します
アカウント名には VyOS に設定した認証用のユーザ名を入力します

そしてその下にある認証設定を選択します
「ユーザ認証」のパスワードと「コンピュータ認証」の共有シークレットを入力します
どちらも VyOS の設定時に決めたものにすれば OK です
l2tp_ipsec_vyos_with_mac7.png

サーバ情報と認証情報が入力できたら「接続」を選択します
接続に成功すると VyOS に設定した払い出すプライベート IP の範囲から 1 つ Mac に IP が振られます
今回であれば「192.168.0.100」が振られると思います

Mac 上でインタフェースを確認すると VPN 用に 1 つ追加されていることも確認できます

  • ifconfig ppp0
ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
        inet 192.168.0.100 --> 10.255.255.0 netmask 0xffffff00

この状態になればニフティクラウド上の vlan 内にあるサーバにプライベート IP でアクセスできるようになります
ブラウザに 192.168.0.10 を入力して Apache のスタート画面が表示されることを確認すると良いと思います
ping や SSH もプライベート IP を指定してできると思います

最後に

VyOS をクラウド上に構築して L2TP/IPSec で VPN 接続してみました
VyOS を使えば簡単に実現できるので簡易な VPN を構築したい場合には便利かなと思います
ただ、現状の構成だと VyOS が完全に SOPF になっているので実際のサービス運用をする場合には DR などを考えなければいけないかなと思います
実際自分が試したいたときにもちょくちょく切断する現象が発生しましました (WiMAX が関係している可能性もありますが)

また、今回はクライアント側の WiMAX 側は特に何も設定しませんでしたが、ルータによってはもしかすると何か設定が必要になるかもしれません

参考サイト

ニフティクラウドのルータの NAT 機能を使ってインターネットにアクセスしてみた

概要

ニフティクラウドのルータ機能に NAT 機能があります
今回はこの NAT 機能を使用してグローバルネットワークを持たないサーバをインターネットに接続してみたいと思います

環境

  • ニフティクラウド (2016/12/24 時点)
    • Region: east-1 (Zone: east-12)
  • ゲスト OS: CentOS6, 7

構成

構成は前回までに作成したルータ環境をそのまま使用します
そのままだとサーバがグルーバルに直接通信できてしまう状況なので今回はそれをルータ経由でアクセスできるようにしてみます
全体の構成図としては以下の通りです
niftycloud_router_nat_usage1.png

グローバル IP の削除

まず c7 サーバからグローバルインタフェースを取り外します
サーバを選択し「ネットワーク設定変更」を選択します
ダイアログで「グローバル」の IP アドレスを「利用しない」に変更します
niftycloud_router_nat_usage2.png

設定が完了してコンパネ上の表示からグローバル IP が見えなくなることを確認します

念のため

グローバル IP を削除するとサーバが再起動します
サーバが再起動すると c6, c7 のルーティングがなくなってしまうのでファイルに書いてルーティング情報を保存しておきましょう

  • c6
    • cat /etc/sysconfig/network-scripts/route-eth1
172.10.0.0/16 via 192.168.0.1
  • c7
    • cat /etc/sysconfig/network-scripts/route-ens192
192.168.0.0/16 via 172.10.0.1

これでグローバルネットワークが削除されてサーバが再起動しても c6, c7 間はプライベート IP を使って通信することができます

ルータをグローバルネットワークに接続する

サーバが接続しなくなったので、代わりにルータをグローバルネットワークに接続します
左メニューの「ネットワーク」からルータを選択し「ルータの操作」から「ネットワーク設定変更」を選択します
そして「ネットワーク追加」から「共通グローバル」を選択し追加します
niftycloud_router_nat_usage3.png

設定が完了するとネットワークの構成図でルータが共通グローバルに接続されると思います

NAT テーブルの作成

次にインターネットに接続するための NAT 設定を行います
左メニューの「ネットワーク」から「NAT テーブル」を選択します
そして新規作成から以下のように入力します
niftycloud_router_nat_usage4.png

c7 の IP アドレス (172.10.0.10) を共通グローバルに NAT する設定を追加します
これは Source NAT (SNAT) になるので SNAT 側に追加します

ルータへの NAT テーブル追加

追加した NAT テーブルをルータに反映させます
ルータを選択し再度「ルータの操作」からネ「NAT テーブル設定変更」を選択します
先ほど作成した NAT テーブルを選択し「変更する」を選択します
niftycloud_router_nat_usage5.png

問題なくルータに反映されれば OK です
これでニフティクラウド上での操作は完了なのであとは OS 上で動作確認します

OS 上での設定と動作確認

c7 サーバへは c6 サーバからルーティングが通っているので、そこから SSH すると良いです
グローバルからはインタフェースを外しているのでできなくなっているためです
とりあえず ping 8.8.8.8 などして接続できないことを確認します

では c7 サーバに default gateway を設定します
以下のコマンドを実行してください

  • ip r add default via 172.10.0.1 dev ens192

これを実行した段階で先ほどの ping が通るようになっていると思います
更に curl www.google.co.jp などを実行すると HTML が取得できると思います
yum update もできます

default gateway の情報は恒久的に保存したい場合は以下のファイルに追記しましょう

  • vim etc/sysconfig/network-scripts/ifcfg-ens192
GATEWAY=172.10.0.2

で再起動しても default gateway の設定が消えません

最後に

ニフティクラウドのルータを使って SNAT 機能を実現してみました
これでルータ配下にいるサーバはグローバルネットワークを持たなくてもインターネット通信できるようになりました

ニフティクラウドの場合、グローバルネットワークを取り外すと少しお値段が安くなるのでインターネットには接続したいがグローバル IP を使わない場合にはお得かもしれません (ルータの料金はかかりますが)

2016年12月18日日曜日

ニフティクラウドのルータの DHCP 機能を使ってみた

概要

前回、ルータ機能を使って VLAN 同士を接続させてみました
このままだとサーバを VLAN に追加したときに毎回 IP を手動で設定しなければなりません
面倒でなければそれでも問題ないですが、IP を振るのが面倒な場合にルータの DHCP 機能を使うと設定の手間を省くことができます

環境

  • ニフティクラウド (2016/12/18 時点)
    • Region: east-1 (Zone: east-12)
  • ゲスト OS: CentOS6, 7

DHCP コンフィグの作成

環境は前回のものをそのまま使います
まずは DHCP コンフィグを作成します
「ネットワーク」->「DHCP コンフィグ」から「DHCP コンフィグ作成」を選択します

「自動割り当て IP アドレス」の右端にある「追加」ボタンを押します
DHCP コンフィグの作成では VLAN で指定した CIDR の範囲で DHCP として割り当てる IP の範囲を指定することができます
今回は 192.168.0.100 から 192.168.0.254 の範囲の IP を使用するようにしました
try_niftycloud_roter_dhcp1.png

これで作成すれば OK です

ルータへの DHCP コンフィグの設定

作成した DHCP コンフィグをルータに割り当てます
「ネットワーク」から構成図を表示します
そして、ルータを表示し「ルーターの操作」から「ネットワーク設定変更」を選択します

ネットワークの設定変更画面で今回作成した DHCP コンフィグの CIDR の範囲に該当する VLAN 側の DHCP コンフィグを変更します
今回は vlan1 側に DHCP コンフィグを割り当てるので以下のようになります
try_niftycloud_roter_dhcp2.png

設定を反映させれば完了です
コンパネの注意書きにもありますが、この操作はルータの再起動が必要になるのでサーバ同士での通信断が発生するため本番環境などの場合には注意して操作してください

若干反映に時間がかかるので待ちます
ルータの設定を確認して以下のようになれば設定完了です
try_niftycloud_roter_dhcp3.png

try_niftycloud_roter_dhcp4.png

既存のサーバで動作確認

ルータへの反映が完了したら早速 DHCP で IP アドレスが振られるかどうか確認してみましょう
vlan1 に所属していた c6 サーバは固定 IP に設定していたので、以下のように /etc/sysconfig/network-scripts/ifcfg-eth1 を書き換えてインタフェースを再起動してみます

DEVICE=eth1
BOOTPROTO=dhcp
ONBOOT=yes
PEERDNS=no
  • ifdown eth1
  • ifup eth1

これで IP がどうなるか確認してみましょう
前回までだと 192.168.0.10 を固定 IP にしていましたが、DHCP コンフィグで指定した範囲の IP が割り当てられていることがコンパネ上で確認できると思います
try_niftycloud_roter_dhcp5.png

新規にサーバを作成して動作確認

新規でサーバを作成した場合の IP の割り当てについても動作確認してみます
サーバを作成する際にプライベート側のネットワークの指定で vlan1 を指定しかつ IP アドレスの欄を「自動割り当て」にします
try_niftycloud_roter_dhcp6.png

これで新規 + VLAN 環境の場合でもプライベート側の IP アドレスを自動で付与することができます
サーバを作成してコンパネ上で IP がどうなっているか確認しましょう

!?
try_niftycloud_roter_dhcp7.png

が、付与することは付与できたのですが IP アドレスが DHCP コンフィグで指定した start からの値ではなく単純に若い方から順番に振られる感じでした
もしかしたら新規で作成した場合は DHCP コンフィグの値が無視されているのかもしれません
ちなみにこの状態になって ifdown -> ifup を繰り返しても再度同じ IP が振られてしまいました

また、試しに更にサーバを追加で作成してみましたがやはり若いほうから IP が振られてしまいました
今回は CentOS6, 7 で挙動を確認しましたがどちらも同じ感じでした
もしかすると他の OS だと挙動が違うかも、、、たぶんないと思いますが

サーバ側での追加作業

前回も実施しましたが、実際に別の VLAN のサーバと通信させるためにはルーティングの追加作業は必要です
以下の

最後に

ニフティクラウドのルータの DHCP 機能を使ってみました
これで VLAN 内のサーバに対しても動的に IP を振ることができるので設定の手間が省けます

2016年12月17日土曜日

ニフティクラウドのルーター機能を使って VLAN 同士を接続してみた

概要

ニフティクラウドのネットワークの機能にルータという機能があります
http://cloud.nifty.com/service/router.htm

異なる VLAN 同士を相互に接続することができる機能のようです
実際に動作試してみたので紹介します

環境

  • ニフティクラウド (2016/12/17 時点)
    • Region: east-1 (Zone: east-12)
  • ゲスト OS: CentOS6, 7

プライベート LAN の作成

今回は 2 つのプライベート LAN (vlan1 と vlan2) をルータを使って相互に接続してみます
ニフティクラウドのコントロールパネル (以下、コンパネ) から「ネットワーク」と進み「プライベート LAN の作成」から作成します

まず vlan1 は以下の通り
CIDR は 192.168.0.0/16 にしました
800

vlan2 は以下の通り
こちらは同じ CIDR だと疎通できた感がないので別の CIDR (172.10.0.0/16) にしました
try_niftycloud_router2.png

とりあえず作成できれば OK です

サーバの作成

作成した 2 つのプライベート LAN 上にサーバをそれぞれ 1 台ずつ作成します
特に理由はないですが、vlan1 には CentOS6 (c6) を vlan2 には CentOS7 (c7) をそれぞれ作成します
サーバを作成するときにプライベート側のネットワークは作成した VLAN をそれぞれ指定してください
IP アドレスはサーバが起動したあとに手動で設定します

サーバのスペックは好きなものに設定してください
ファイアウォールも自環境からアクセスできるように適宜設定してください
ただし、ファイアウォールは後々面倒になりそうなので各サーバには同じファイアウォールを設定してください

c6 -> vlan1
try_niftycloud_router3.png

c7 -> vlan2
try_niftycloud_router4.png

こんな感じで作成すれば OK です

サーバに IP アドレスを付与

eth0 側にはグローバル IP が振られているので eth1 側にプライベート IP を付与します
CentOS6 と CentOS7 で若干設定ファイルが異なるので注意してください
IP は「1」を振らなければ何番でも OK です
「1」は後で作成するルータが使用します

c6

  • vim /etc/sysconfig/network-scripts/ifcfg-eth1
  • ifup eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.0.10
NETWORK=192.168.0.0
NETMASK=255.255.0.0
ONBOOT=yes
PEERDNS=no

c7

  • vim /etc/sysconfig/network-scripts/ifcfg-ens192
  • ifup ens192
EVICE=ens192
BOOTPROTO=static
IPADDR=172.10.0.10
NETWORK=172.10.0.0
NETMASK=255.255.0.0
ONBOOT=yes
PEERDNS=no

設定したら NIC を up してください
コンパネから確認すると以下のような感じになっていれば OK です
try_niftycloud_router5.png

ルータの作成

ではルータを作成していきます
左メニューから「ネットワーク」で「ルーター作成」を選択します
作成時のポイントは以下の通り

  • ネットワーク設定で作成した VLAN をそれぞれ設定します

追加ボタンからそれぞれ追加すれば OK です
ルータの IP は特に指定しないようにします
そうすることで「1」を勝手に降ってくれるようです
try_niftycloud_router6.png

  • ファイアウォールはサーバに設定したものと同じものを設定してください

別のファイアウォールを設定しても特に問題はないです
VLAN 同士で特にアクセス制限を設けない場合は同じファイアウォールにすればファイアウォール内のアクセスはすべて許可となります

ルータが作成できたら詳細を確認しましょう
以下のような感じなっていれば OK です

基本情報
try_niftycloud_router8

ネットワーク
try_niftycloud_router9.png

今回の構成が完成するとネットワーク構成図的には以下のようになります
( 関係ないサーバが 1 台いますが気にしないでください )
try_niftycloud_router7.png

ルーティングの追加と動作確認

あとは OS 上での設定となります
実施前に以下の ping を実行しておくと実際に疎通が通ったことがわかるので良いと思います

  • c6 # ping 172.10.0.10
  • c7 # ping 192.168.0.10

ルーティングを追加していない状態だと通信することができないと思います
ではまず c6 に以下の設定を実施します

route add -net 172.10.0.0/16 gw 192.168.0.1 eth1

次に c7 に以下の設定を実施します

route add -net 192.168.0.0 netmask 255.255.0.0 gw 172.10.0.1 ens192

すると ping が通るようになるのが確認できると思います
通った状態でルーティングを削除してみてください
例えば c6 だと route del -net 172.10.0.0/16 gw 192.168.0.1 eth1 という感じです
削除するとお互いが通信できなくなることがわかると思います

ちなみに再起動するとルーティングが削除されてしまうので /etc/sysconfig/network-scripts/route-eth1 とかに設定を書いておくと再起動しても消えません

最後に

ニフティクラウドのルータ機能を使って異なる VLAN を通信できるようにしてみました
VLAN が複数ある環境では便利な機能かもしれません
ルータには DHCP の機能もあるので VLAN 内のサーバに動的に IP を振ることもできると思います (今回紹介はしません)

また、別の機会で他の機能も紹介できればと思います

ハマりポイント

今回の作業でハマった点は以下の通り

  1. OS 上にルーティングの設定が必要なことに気づかなかった
  2. ドキュメントが少ない

1 つ目はネットワークの機能に「ルートテーブル」という機能がありこれで代用できるのかなとずっと勘違いしていました
ルートテーブルにいろいろとルートの追加をしてはルータにルートテーブルを設定して、外しては再度設定してと何度も試したのですが疎通できず素直に OS レベルでルーティングを設定してみたところすんなり通った感じです

2 つ目はそのまんまですが、Web 上に参考になるドキュメントが少なかったです
VPN 接続系の記事はちょくちょくあるのですが、ルータの記事が少ない感じでした