UbuntuにKVM+pfSenseで、自宅サーバーをルーターにする
ルーターにRTX1200を使っていたのですが、そろそろ時代遅れ感が否めません。リプレース先としてRTX1210とかIX2215も考えましたが、新しく買う金もないので、自宅サーバーをルーターにしました。これならタダです。
OSは一番メジャーなpfSenseを選定しました。
もちろんpfSense用に一台組んだらルーター買うより高くつくので、この今見てるであろうWordPressとかいろいろ動いてる自宅鯖上の仮想マシンとして、KVMでインストールします。
ホストマシンは Ubuntu Server 20.04 です。
回線はNURO光で、ONUは自前で用意したMA5671(1GbE*4ポート)なのでルーター機能はなくグローバルIPが降ってくる環境です。
インターフェースの構成
pfSenseのインターフェースは以下のような構成とします。
・WAN
・WAN2
・LAN (192.168.100.0)
・LAN_DMZ (192.168.200.0)
NURO光自体は2Gbpsなのですが、ONUのポートは1GbEです。グローバルIPはONUの設定で2個降ってくるので、ONUから2本伸ばしてpfSenseのロードバランス機能を使い、疑似2Gbpsにします。そのためWANが2つあります。
“LAN”はメインのLANです。”LAN_DMZ”は外に公開するサーバーのネットワークとして、”LAN”にはアクセスできないようにします。
スイッチの設定で、ポートVLANでお互いが疎通できないようにして、同じスイッチに繋ぎました。
ホストマシンのnetplanを見てください
サーバーには、WAN側であるONUから2本、LAN側であるスイッチへ3本の計5本のLANケーブルが刺さってます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | network: ethernets: eno1: dhcp4: false dhcp6: false eno2: dhcp4: false dhcp6: false enp7s0f0: dhcp4: false dhcp6: false enp7s0f1: dhcp4: false dhcp6: false enp8s0f0: dhcp4: false dhcp6: false enp8s0f1: dhcp4: false dhcp6: false bonds: bond0: interfaces: - enp7s0f1 - enp8s0f0 parameters: mode: 802.3ad bridges: br0: interfaces: [eno2] dhcp4: false dhcp6: false br1: interfaces: [enp7s0f0] dhcp4: false dhcp6: false br2: interfaces: [bond0] addresses: [192.168.100.100/24] gateway4: 192.168.100.1 nameservers: addresses: [192.168.100.1] br3: interfaces: [enp8s0f1] dhcp4: false dhcp6: false version: 2 |
仮想マシンに渡すために、bridgeを作ります。それぞれ次のように対応します。
br0 WAN
br1 WAN2
br2 LAN
br3 LAN_DMZ
メインのLANは帯域を多くとりたいので、スイッチと2本で繋ぎbondingで束ね2Gbpsにしたもの(bond0)をブリッジしています。
ブリッジbr2にIPアドレスを付与して、そのサーバー自身のアドレスとします。
インストール
pfSenseのイメージをダウンロードして、適当な場所に置いてください。
とりあえず、以下のようにしました。ネットワークはvirtioを指定することで性能が上がります。
1 | $ sudo virt-install --name pfsense --memory 4096 --vcpus 4 --graphics vnc --disk /var/lib/libvirt/images/pfSense.img,size=16,bus=virtio,format=raw --autostart --os-type unix --cdrom /Diskimages/pfSense-CE-2.5.1-RELEASE-amd64.iso --network bridge=br0,model=virtio --network bridge=br1,model=virtio --network bridge=br2,model=virtio --network bridge=br3,model=virtio |
VNCで繋ぎ、インストールを済ませます。
途中のウィザードでUEFI, BIOSどちらか選ばされますが、普通にBIOSを選択してください。
設定
全部設定するとこうなりました。
全部終わった後に書いてるので漏れあるかもしれません。
インターフェースの割り当て
各インターフェースの設定
WANの設定(IPv6はこちらを使う、設定は後述)
WAN2の設定
LANの設定
LAN_DMZの設定
ファイアウォールの設定
LAN_DMZからLANにアクセスできないようにし、pfSenseの管理画面にも行けないようにします。
ロードバランス(Load Balancing)の設定
WAN, WAN2 を両方使って2Gbpsを手に入れます。
System/ Routing / Gateway Groups
どっちもTier 1にすることで均等に通信されるはずです。
デフォルトゲートウェイを作ったロードバランスにします
Speedtestで1Gbps超えたのを確認しました。Speedtestのマルチコネクションが効いたらしいです。でもこれっきり1Gbps超えたの見たことないですね。
ロードバランスでIPコロコロ変わったら何か認証のあるサイトで弾かれるんじゃないかと心配だったのですが、別にそんなことなかったです。
IPv6の設定
詳しいことはなーんもわかりませんが、以下のようにすればIPv6が通りました。
まず、インターフェースを各インターフェースの設定の欄で貼った画像の通りに設定します。具体的に
WANでIPv6 Configuration TypeをDHCP6、DHCPv6 Prefix Delegation sizeを56に
LANでIPv6 Configuration TypeをTrack Interface、IPv6 InterfaceをWAN、IPv6 Prefix IDを0
LAN_DMZでIPv6 Configuration TypeをTrack Interface、IPv6 InterfaceをWAN、IPv6 Prefix IDを1
System / Advanced / Networking
Allow IPv6を選択
System / Routing / Gateways
IPv6のデフォルトゲートウェイを指定します。
Services / DHCPv6 Server & RA / LAN
以下のように設定します
pfSenceを再起動すればIPv6が降ってくるはずです。なお、こっちの環境では降ったり降らなかったり1時間後に降ったりします😅
Firewallのルールも見落としがちなので、降ってこない場合はその辺も見直してみてください。
VPN
OpenVPNはこの通りに設定すればOKでした。
https://internet.watch.impress.co.jp/docs/column/shimizu/1286611.html
ただ最後のClient Export Utilityは、System→Package ManagerからClient Export Utilityと検索してインストールしないと出てきませんでした。その点だけ注意です。
あと、CPUの高速暗号化処理、AES-NIが標準でinactiveになっているので、
System→Advanced→Miscellaneousから、Cryptographic HardwareをAES-NI and BSD Crypto Deviceにしておくと有効になります。
性能
Xeon E3-1245 v5 の 4コア割り当てで、Speedtest回してるときでもpfSense上から見たCPU使用率は10%くらいでした。
性能的にも満足です。
追記
疑似2Gbpsから本物2Gbpsにしました
最近のコメント