FreeBSDでOpenVPNサーバがすんなり構築出来なかった話(ルーティングモード編)

投稿者: | 2016年1月22日

加賀瀬です
ご無沙汰してます
明けましておめでとうございます
年明けに我が家のサーバ群からCentOSを駆逐すると言うツイートから始まり
CentOSサーバをFreeBSDへ移行させてまして、現在このブログサーバもFreeBSDで運営しております


で、程よくWEB/DBと移行が終わり、OpenVPNを使っていたサーバも移行したところで障害発生
VPNに繋がらない
バカですか
CentOS繋がってたでしょ、何で繋がらないのと
ここでは細かいOpenVPNの設定や鍵作成の話は無しにして、
今回ハマった内容について重点的に書いていこうと思います。


結論から言いますと、
元々CentOSではルーティングモードで稼働していたOpenVPNサーバですが、
こいつ、iptablesにNATのマスカレード指定が1行記述されてました
ええ、それが原因のすべてです。
[ルーター ](192.168.x.1) ==== [VPNサーバ](192.168.x.2)
==========[サーバ群](192.168.x.y)
こんな感じの構成でルーティングモードで繋ごうとした場合、
例えばOpenVPNデフォルトのトンネルIP(10.8.0.x)へのパケットはVPNサーバ(192.168.x.2)へ転送する設定をルーター側で行う事
と言う話が一般的なようです。
ですが加賀瀬さん、ルーターは最低限のポート開放のみで細かいルーティングの設定なんてやってられんのじゃいと
VPNサーバ側でNAT制御することで、IP10.8.0.xのパケットを192.168.x.2からと書き換えて通信していたんですね
Linux/iptablesではこれ、たった1行で済む話なんですが、
FreeBSD/ipfwで構築していて今日まで悩んでました
と言うわけで、FreeBSD側で行った設定は以下の通り
/etc/rc.conf

gateway_enable=”YES”
firewall_enable=”YES”
firewall_nat_enable=”YES”
firewall_nat_interface=”em0″
firewall_script=”/usr/local/etc/ipfw.rules”
openvpn_enable=”YES”
openvpn_if=”tun”
openvpn_configfile=”/usr/local/etc/openvpn/openvpn.conf”

/etc/sysctl.conf

net.inet.ip.fw.one_pass=0 #いるんかな?これ

/usr/local/etc/ipfw.rules

#! /bin/sh
#
IPF=”ipfw -q”
ipfw -q -f flush
# ココ重要 NAT設定
# em0はLAN側を向いているインタフェース
# NICが2枚あるとか言う場合は特に意識する
# 10.8.0.0/24はVPNネットワーク
$IPF nat 1 config log if em0 reset
$IPF add 2 nat 1 all from 10.8.0.0/24 to any via em0 out
$IPF add 3 nat 1 all from any to me via em0 in
#loopback
$IPF add 10 allow all from any to any via lo0
$IPF add 20 deny all from any to 127.0.0.0/8
$IPF add 30 deny all from 127.0.0.0/8 to any
$IPF add 40 deny tcp from any to any frag
# statefull
$IPF add 50 check-state
$IPF add 60 allow tcp from any to any established
$IPF add 70 allow all from any to any out keep-state
$IPF add 80 allow icmp from any to any
# open port
$IPF add 090 allow tcp from 192.168.0.0/24 to me 22 via em0
$IPF add 170 allow udp from any to me 1194 via em0
# allow tunnel packet (ココも細かく切った方が良いかな)
$IPF add 230 allow all from any to any via tun0
# deny and log everything
$IPF add 10000 deny log all from any to any

と、こんな感じです
ipfwの設定はopen portの部分とかは各自でカスタマイズしてくださいな
セキュリティ的にこれヤバいぜとかあったら教えてくれると助かります
色々調べプレイでどこいじったかも全然把握し切れてないのでひょっとしたらこれだけじゃ動かないかも

今日はこの辺で
それではまた次回

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です