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ケーブルが刺さってます。

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を指定することで性能が上がります。

$ 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 TypeDHCP6DHCPv6 Prefix Delegation size56
LANでIPv6 Configuration TypeTrack InterfaceIPv6 InterfaceWANIPv6 Prefix ID0
LAN_DMZでIPv6 Configuration TypeTrack InterfaceIPv6 InterfaceWANIPv6 Prefix IDを1

System / Advanced / Networking
Allow IPv6を選択

System / Routing / Gateways
IPv6のデフォルトゲートウェイを指定します。

画像に alt 属性が指定されていません。ファイル名: image-11-1024x587.png

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にしました

おすすめ

コメントを残す

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

Index