2017年5月21日日曜日

Edgerouterに証明書導入

今日は家庭内でhttpsの証明書を取る話です。

httpsの接続先がオレオレ証明書だと、接続する度に信頼するかと聞かれ、パスワードのオートコンプリーションも効かないし、色々面倒です。

かといって公式な認証を取ると3万円程度必要になります。無理無理無理w

そこで、今回はLet's Encryptを使って無料で公式な認証を取る話です。認証を取ると、URLが緑になって、パスワードのコンプリーションも効いて便利です。


前提として必要なのは、以下の通り。
  • Edgerouter 1.8.5以降
  • 独自ドメイン (1年目は99円や299円から)
  • ポート80を一時的に公開できること
独自ドメインは、1年目は割引で、2年目からは4000円超なんてのもあるので気をつけましょう。2年目以降が1200円程度なら妥当だと思います。ドメインを作ったら、IPはDynamic DNSを利用して、自分のドメインのDNSからは、そのDDNSをCNAME(ALIASみたいな物)で指すようにするといいでしょう。

その先の手順は以下の通りです。
  1. 外部の名前で、内部から接続できるようにする
  2. 外部から接続しacme-tinyを使って認証を作成する
まず、外部の名前、今回は`router.jam.blue`としてますが、これで内部からルーターのweb UIに接続できるよう設定します。その手順は以下の通り。
  1. router.jam.blueでIPを引けるようにする
  2. web UIをrouter.jam.blueに公開する
まず手元のPCで、nslookupしてみます。

$ nslookup router.jam.blue
Server:         127.0.1.1
Address:        127.0.1.1#53

Non-authoritative answer:
router.jam.blue canonical name = jam7.ddns.net.
Name:   jam7.ddns.net
Address: 180.145.72.84

こう出力されれば問題なし。127.0.1.1や192.168.1.1などのプライベートアドレスが出てくると問題あり。

対応方法は、まずホスト名に適当な物、router.jam.blue以外を設定します。これは、debian系のedgerouterでは、ホスト名を設定すると、それを127.0.1.1で登録するので、それを回避するためです。


こんな感じに設定します。同時に、WizardのDNS host namesも見て、router.jam.blueを全て消します。

これで、WAN側のアドレスだけになるはず。それが出来たら、Config treeから、service gui listen-addressを0.0.0.0にして、web UIを公開します。ここでは、httpdの設定を変えているだけで、これ以外にfirewallでブロックされているので、実際には外部からは接続できません。


この例では、certificates導入済みなので、ca-fileやcert-fileがデフォルトとは異なってますが、その下のlisten-addressを修正して、Previewして設定してください。

ここまでできたら、内部のPCから、router.jam.blueでweb UIが開けるはずです。

次は、「外部から接続しacme-tinyを使って認証を作成」なんですが、これは簡単で、 https://github.com/mgbowen/letsencrypt-edgemax をインストールして実行するだけです。

インストール時のgitの導入などでディスクスペースが足らない場合は、バックアップされてるシステムイメージを削除しましょう。

admin@router:~$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
ubi0_0                  220080    203208     12036  94% /root.dev
aufs                    220080    203208     12036  94% /
devtmpfs                127364         0    127364   0% /dev
tmpfs                   127488       144    127344   0% /run
tmpfs                   127488       144    127344   0% /run
tmpfs                   127488        80    127408   0% /var/log
tmpfs                   127488         8    127480   0% /tmp
none                    127488      1364    126124   1% /opt/vyatta/config
unionfs                 127488         8    127480   0% /opt/vyatta/config/tmp/new_config_4ukbi6sshf7ul2arvu74vggnd4scdcue
admin@router:~$ delete system image
The system currently has the following image(s) installed:

v1.9.1.1.4977602.170427.0113   (running image) (default boot)
v1.9.0.4901118.160804.1131

You are about to delete image [v1.9.0.4901118.160804.1131]
Are you sure you want to delete ? (Yes/No) [Yes]: yes
Removing old image... Done
admin@router:~$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
ubi0_0                  220080    126412     88828  59% /root.dev
aufs                    220080    126412     88828  59% /
devtmpfs                127364         0    127364   0% /dev
tmpfs                   127488       144    127344   0% /run
tmpfs                   127488       144    127344   0% /run
tmpfs                   127488        80    127408   0% /var/log
tmpfs                   127488         8    127480   0% /tmp
none                    127488      1364    126124   1% /opt/vyatta/config
unionfs                 127488         8    127480   0% /opt/vyatta/config/tmp/new_config_4ukbi6sshf7ul2arvu74vggnd4scdcue

後は、手順通り。sudo ./install.shするだけです。エラーが発生した場合でも、certificatesを導入してしまうため、web UIが見れなくなるかもしれません。そういう時は、sudo ./uninstall.shで回復できます。

2017年5月9日火曜日

net.ipv4.ip_forward が勝手に有効になる

会社で、それまで使ってたマシンを踏み台マシンにしようとした所、 net.ipv4.ip_forward が勝手に有効(1)になって、こまった話です。

結論からいうと、libvirtdやdockerを削除しましょう。

それらが有効になっていると、起動直後の設定処理中に、勝手にip_forwardを有効にしてしまいます。

もし、踏み台マシンでdockerを使う必要がある場合などは、各自でip_forwardを有効のまま設定する方法などを調べてみてください。

# うちは諦めて踏み台マシンからはdockerを消しましたw

2017年2月19日日曜日

git showの使い方

hackしてますか〜?

年末にchromebook買ってから、家ではひたすらプログラミング&コンパイルしてます。楽しい。

今日はgitの便利な使い方、"git show"の使い方の紹介です。

特定のバージョンの特定のソースファイルを見たい!ということはありませんか?
rcsだと、"co -p"でやっていたあれです。

$ git show master:packages/python27.rb
require 'package'

class Python27 < Package
  version '2.7.13'
  source_url 'https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz' # software source tarball url
  source_sha1 '18a8f30a0356c751b8d0ea6f76e764cab13ee046'                     # source tarball sha1 sum
  binary_url ({
    ...

みたいに書きます。数年git使ってましたが、先程やっとやり方を見つけましたw
"master^^:file"みたいな何時もの指定方法も使えます。

わーい、すごーい😁

2017年1月8日日曜日

GitHubにバイナリファイルをuploadする

今回はGitHub関連ツールの紹介です。

GitHubに公開したファイルとは別に、データファイルだけを置いて、それをwgetを使って別途利用して欲しい場合があります。例えば、chromebrewで使うコンパイル済みバイナリファイルなど。

昔のGitHubだとそういうファイルをpostして、git cloneするファイルとは別に管理できたみたいですが、今は出来ません。

今は代わりにreleaseページを作ってそこにバイナリを置けるのですが、イマイチ使いづらいのです。毎回web UIからファイルをD&Dしないといけなかったり。

なのでこれまで使ってなくて、代わりにgit lfsを使おうと調べてみたらこちらもイマイチ、バグがあったり遅かったり、更にはdevelopperは必ず全てのデータを取得しないといけないなど、使いづらそうです。

なので今度は方向性を変えて、releaseページにCLIからファイルを追加する方法を探してみました。そしたら良いのがあったので紹介です。

https://github.com/aktau/github-release

ただオプションがいっぱい必要だったりイマイチ使いづらいなと。なのでwrapperを作ってみました。

https://github.com/jam7/simple-github-release

できることは最小限に絞って、他のプロジェクトにコピーして置いて使いやすいよう工夫しています。コピーして使う時は、先頭の'owner'と'repo'をハードコーディングしてしまうといいですね。

これを使うと、
$ ./upload-github-release.sh v1.0 tarfiles/*.tar.xz
とするだけで、v1.0のリリースページにtarfilesディレクトリ配下のファイルが全てコピーされます。困ってる人は是非使ってみてください。