OPNsense or pfSense に cloudflared をインストールする

Summary

OPNsense (or pfSense) で cloudflared をインストールするのに手こずったためインストール方法を残す

Topic

OPNsense の公式では cloudflared は FreeBSD で提供されていないが、 FreeBSD.org の ports でバイナリーパッケージが提供されているためこれを使う。 2024/02 現在配布されいてるバージョンは 2023.10 で若干古いのと service 化する rc.d のファイルが古く、 CloudFlare Dashboard で設定を管理できる接続方式に対応していなかったため合わせて対応した。

なお、下記のようなコマンドインストールする場合も 2024/02 現在ではうまくビルドできなかったのでこの方法になった

1
2
3
opnsense-code ports
cd /usr/ports/net/cloudflared/
make install

インストール

OPNsense 24.1 では FreeBSD.conf があるのでこれを使う

1
2
sed -ie 's/enabled: no/enabled: yes/g' /usr/local/etc/pkg/repos/FreeBSD.conf
cat /usr/local/etc/pkg/repos/FreeBSD.conf

/usr/local/etc/pkg/repos/FreeBSD.conf
1
FreeBSD: { enabled: yes }

update cache

1
pkg update -fp

検索してみる

1
2
# pkg search cloudflared
cloudflared-2023.10.0_1    Cloudflare's Argo Tunnel client

インストール

1
pkg install cloudflared

認証

CloudFlare と接続するために証明書のダウンロード認証をする

1
cloudflared tunnel login

Service ファイルを作る

rc.d では名前がかぶると面倒なのでコピー先は /etc/rc.d/cloudflaredd とする

/etc/rc.d/cloudflaredd
 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
#!/bin/sh

# PROVIDE: cloudflaredd
# REQUIRE: cleanvar DAEMON NETWORKING
#
# Options to configure cloudflaredd via /etc/rc.conf:
#
# cloudflaredd_enable (bool)    Enable service on boot
#                               Default: NO
#
# cloudflaredd_token (str)      Tunnel token.
#                               Default: Required

. /etc/rc.subr

name="cloudflaredd"
rcvar="cloudflaredd_enable"
logfile="/var/log/cloudflared.log"
pidfile="/var/run/cloudflared.pid"
procname="/usr/local/bin/cloudflared"

load_rc_config ${name}

: ${cloudflaredd_enable:="NO"}
: ${cloudflaredd_token:="<Required TOKEN>"}

if [ "${cloudflaredd_token}" = "<Required TOKEN>" ]; then
    echo -e "Required: 'cloudflaredd_token' must be set in /etc/rc.conf.d/${name}.\n\n"
    echo -e "cloudflaredd_token=\"<Required TOKEN>\"\n"
    echo -e "This command part"
    echo -e "> sudo cloudflared service install <TOKEN>"
    echo -e "cloudflaredd_token=\"<Required TOKEN>\"\n" > "/etc/rc.conf.d/${name}"
    exit 1
fi

command="/usr/sbin/daemon"
command_args="-o ${logfile} -p ${pidfile} -f ${procname} --no-autoupdate tunnel run --token ${cloudflaredd_token}"

run_rc_command "$1"

1
2
touch /etc/rc.d/cloudflaredd
vi /etc/rc.d/cloudflaredd

設定ファイルの配置

何もしてないと、設定をするように促すようにしたので、それ通り設定

1
2
3
4
5
6
7
8
root@OPNsense:/etc/rc.d # service cloudflaredd enable
Required: 'cloudflaredd_token' must be set in /etc/rc.conf.d/cloudflaredd.


cloudflaredd_token="<TOKEN>"

This command part
> sudo cloudflared service install <TOKEN>

Dashboard でトンネルを作ると、続きに sudo cloudflared service install から始まるコマンドが表示されるがこれは cloudflared がネイティブで対応している OS の場合 service ファイルの作成と登録を実施してくれるが、、 FreeBSD は恩恵に預かれないので後半の token を下記のファイルに貼り付けて保存する。

1
vi /etc/rc.conf.d/cloudflaredd
/etc/rc.conf.d/cloudflaredd
1
cloudflaredd_token="<Required TOKEN>"

起動と自動起動を設定する。 正しく完了すれば、 Dashboard に表示されるはず

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
root@OPNsense:/etc/rc.d # service cloudflaredd enable
cloudflaredd enabled in /etc/rc.conf

root@OPNsense:/etc/rc.d # service cloudflaredd status
cloudflaredd is not running.

root@OPNsense:/etc/rc.d # service cloudflaredd start
Starting cloudflaredd.

root@OPNsense:/etc/rc.d # service cloudflaredd status
cloudflaredd is running as pid 32664.

root@OPNsense:/etc/rc.d # service -e | grep cloudflaredd
/etc/rc.d/cloudflaredd
Built with Hugo
テーマ StackJimmy によって設計されています。