今日の出来事。
- 携帯からメールで投稿できるようにしようと思った
- いちいちPOP3見に行くの面倒なのでdot-qmailから直接叩くことにする
- ちまちま作業中に友人からメールが来る
- 「nothing.sh宛にメール送るとdaemonさんからお返事来るよ」
- !?
これはいかん、とメールを何とかすることにする。
普段は、自分宛に届いたメールをGmailに転送するようにしていて、今回はGmailへの転送部分で蹴られていた。もともと nothing.sh は B フレッツのプロバイダ (FreeBit系) 上で稼動している。SPAMラッシュなこのご時世、小さなプロバイダにぶら下がった逆引きもロクにできない弱小サーバからじゃ、動的IPでなくても直接メールを送り出すのが非常に困難だったりする。携帯キャリアに対するOP25Bも既に導入されているし、さらに来春からは全体的にブロックするようになるらしい。さすがにメールが送れなくなると困るので、以前からプロバイダと相談していて、代替手段としてプロバイダ側のSMTP(-AUTH)サーバに転送していたのだけど、これがどうも結構な割合で転送に失敗していた模様。これはマズい。
で、代替案を考えてはいたのだけど、基本的にうまい方法がなかった。
- それなりに安定したレンタルサーバを借りて、SMTPリレー専用にする(無駄が多い)
- 固定IPをくれて、逆引きが正しくできて、OP25Bもないプロバイダに乗り換える(コストと手間が…)
- 諦める
それでも、あーでもないこーでもない、とググっていたら、ふと INTERLINK の マイIP なるサービスを発見。VPN(PPTP)を使ってINTERLINKのバックボーンに接続してくれるサービス。固定IPを1個くれて、逆引き設定もできる。初期設定費用もなくて、月額1,000円。ktkr!
そもそもSMTPだけ使えればいいので、VPNでも速度的な問題はない。固定IP側ではOP25Bも適用されていないようだし、申し込み月は無料で試用できるようなので、何はともあれ試してみることに。さくっとクレジットカードで申し込み。速攻IDとパスワードが発行されて利用可能に。
で、どうやってPPTP張るかなぁと多少悩む。VPNなんてほぼ使ったことがなかったので、またもやググりながら設定を探る。最初は、メールサーバ側から直接PPTP接続しようとして繋がらなくて悩む。ちょっと調べて、どうやらゲートウェイを越えられないということに気づく。ゲートウェイ側の iptables に ip_nat_pptp とかモジュールを突っ込めばいいみたいなんだけど、さすがに外側から kernel のリビルド & リブートはリスクが大きすぎるので諦める。とりあえずゲートウェイ側でPPTP接続したらあっさり繋がったので、ゲートウェイ上でパケットをルーティングして、外向き 25 番だけPPTPに流すことに。iptablesのパケットフィルタリングルールも共用できるしね。
まず、 mailgw.nothing.sh という新たな A レコードを作成して、貰った固定 IP への正引きを設定。それから、 INTERLINK の設定ページ上で逆引きを設定。良好良好。それから、色々調べたり試行錯誤しつつ、 iproute2 + iptables を設定。最終的に、 /etc/ppp/ip-up.local に次のような定義を書いた。
# PPTP側 (ppp1) でIPマスカレード
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp1 -j MASQUERADE
# iptablesで "外向きのSMTPパケット" にマーク(2)をつける
/sbin/iptables -t mangle -A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 \
--dport 25 -j MARK --set-mark 2
# table 20 に PPTP (ppp1) 側の経路を定義
/sbin/ip route add 61.206.126.1 dev ppp1 proto kernel scope link \
src 61.206.126.146 table 20
/sbin/ip route add default via 61.206.126.1 dev ppp1 table 20
# マーク(2)のついたパケットは table 20 を参照してルーティングを行う
/sbin/ip rule add fwmark 2 lookup 20
これでこれまでの通信はそのままで、 tcp/25 のパケットだけ ppp1 に流れるようになった。(あとその他のパケットフィルタリングも忘れずに!)
とりあえずこれでメールは普通に出せるようになったので、しばらく様子を見てみることに。ネット上の話によると、このPPTPはなんかのタイミングで時々切断されてしまうことがあるらしい。切断されたままでも困るので、とりあえず切断されたら再接続するようにスクリプトを書いておいた。 (/usr/sbin/pppd pty "/usr/sbin/pptp 203.141.128.100 --nolaunchpppd" persist file /etc/ppp/options.pptp
って感じで起動しているのだけど、 persist は効いてくれないみたいだ。)
しかし INTERLINK, 通常の B フレッツ接続の固定 8 IP とかでも安いので、時間ができたらそのうち移行したいなぁと思ったり。