FortiGate 50E をつよつよルーターにする

港で FortiGate 50E に OpenWRT が入るらしいので OpenWRT+WireGuard+FRRouting でつよつよルーターを作ってみる

Summary

X(Twitter) で面白そうな Blog が流れてきたのと、 OpenWRT は前から試して見たかったが手頃なハードウェアがなかった。

今回 EoL で大量に出回っている FortiGate 50E で稼働できると記事だったため勢いで購入した 11:46 に見つけて調達完了が 00:18 である(頭おかしい)

結果的に GitHub Actions で OpenWrt のカスタムイメージをビルドして使えるようにした。 (バイナリーの再配布はリスクがありそうなのでしないっぴ

初期化

FortiGate 50E がどういう状態で使われていたかわからないため初期を実施する初期化コマンドは下記

1
2
3
FGT # execute factoryreset
This operation will reset the system to factory default!
Do you want to continue? (y/n)y
Topic

もし、デフォルトのパスワードでログインできない場合

1. maintainerアカウントでログイン

以下のように、 config system global 配下の admin-maintainer 設定が enable の場合は、 maintainer アカウントでログインすることで、管理者アカウントを変更することができます。
※設定が disable の場合は、この方法は利用できません。
※FortiOSのバージョンが 7.2.4 以降の場合は、この方法は利用できません。

1
2
3
FGT60EXXXXXXXXXX # config system global
FGT60EXXXXXXXXXX (global) # set admin-maintainer enable
FGT60EXXXXXXXXXX (global) # end

admin-maintainer 設定が enable の場合は、以下手順でパスワードを初期化します。

  1. FortiGateにコンソール接続する

  2. FortiGateの電源を落とす

  3. FortiGateを起動する
    電源ボタンがある機器の場合は、電源のOff/Onで電源断/起動を行います。
    電源ボタンが無い機器の場合は、電源ケーブルの抜き差しで電源断/起動を行います。
    ※電源断は機器に予期せぬ問題が発生する可能性があります。予めご理解の上作業を実施下さい。
    ※機器の起動は、電源断の後10秒程度経過後に実施下さい。

  4. 起動後、14秒以内に、以下アカウントでログインします。

    • ユーザ名: maintainer
    • パスワード: bcpb + 機器のシリアル番号

    ※シリアル番号のアルファベットは大文字で入力します。
    ※シリアル番号は、機器の底面,背面,側面の何れかに記載があります。

1
2
3
4
FGT60EXXXXXXXXXX login: maintainer
Password: bcpbFGT60EXXXXXXXXXX <- 実施のコンソール上では、パスワードはアスタリスクで表示されます。
Welcome !
FGT60EXXXXXXXXXX #
  1. ログイン後、管理者アカウントのパスワードを変更します。
    以下例では、admin ユーザのパスワードを変更しています。end まで入力すると、パスワードが更新され、ログインプロンプトに戻ります。
1
2
3
4
FGT60EXXXXXXXXXX # config system admin
FGT60EXXXXXXXXXX (admin) # edit admin
FGT60EXXXXXXXXXX (admin) # set password <パスワードを入力>
FGT60EXXXXXXXXXX (admin) # end

ログインパスワードを忘れ、機器にログインできません

カスタムイメージの作成

導入していたら、 L3 Master Device (l3mdev) が Kernel Module として build されてないのと、パッケージも見当たらないためやりたくなかったがカスタムビルドを試してみる 用意したのは Ubuntu 22.04 を用意。
公式の手順で進めていく。

  • 依存関係のインストール
1
2
3
4
sudo apt update
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
python3-distutils rsync unzip zlib1g-dev file wget
  • build

一般ユーザーで実施してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
mkdir -p builds
# Download and update the sources
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
git pull

# Select a specific code revision
git branch -a
git tag
git checkout v23.05.2

# Update the feeds
./scripts/feeds update -a
./scripts/feeds install -a

設定を詰める前に公式 build config をダウンロードする

1
wget https://downloads.openwrt.org/releases/23.05.2/targets/mvebu/cortexa9/config.buildinfo -O .config

その後下記コマンドで設定を変更した

1
2
# Configure the firmware image
make menuconfig

TUI の選択は下記 基本的に <*> でないと squashfs に組み込まれないため <M> にならないようにすること tailscale は使えるが一旦抜くこにした(容量が大きい!!)

 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Target System (Marvell EBU Armada)  --->
Subtarget (Marvell Armada 37x/38x/XP)  --->
Target Profile (Fortinet FortiGate 50E)  --->

Target Images  --->
    [ ] ramdisk  ----
        *** Root filesystem archives ***
    [ ] cpio.gz (NEW)
    [ ] tar.gz
        *** Root filesystem images ***
    [ ] ext4 (NEW)  ----
    [*] squashfs (NEW)  --->
        *** Image Options ***
    (16) Kernel partition size (in MiB) (NEW)
    (104) Root filesystem partition size (in MiB) (NEW)
    [ ] Make /var persistent (NEW)

Global build settings
    [*] Include build configuration in firmware
    Kernel build options  --->
        [*] L3 Master device support

[*] Advanced configuration options (for developers)  --->
    [*] Use ccache
        (.ccache) Set ccache directory

[*] Build the OpenWrt Image Builder
[ ] Build the OpenWrt SDK
[ ] Build the LLVM-BPF toolchain tarball
[ ] Package the OpenWrt-based Toolchain
[*] Image configuration  --->
    [*]   Version configuration options  --->
        (naa0yama) Manufacturer name
        (https://github.com/naa0yama) Manufacturer URL

    Base system  --->
        <M> dnsmasq-dhcpv6................. DNS and DHCP server (with DHCPv6 support)

    Administration  --->
        <*> htop........................................ Interactive processes viewer
        [*]   Compile Htop with lm-sensors support

    Kernel modules  --->
        Network Support  --->
            <*> kmod-tcp-bbr.................................. BBR TCP congestion control
            <*> kmod-veth................................... Virtual ethernet pair device
            <*> kmod-vrf........................... Virtual Routing and Forwarding (Lite)
            {*} kmod-vxlan................................... Native VXLAN Kernel support
            -*- kmod-wireguard........................... WireGuard secure network tunnel

    LuCI  --->
        2. Modules  --->
            Translations  ---> 
                <*> Japanese (ja)

        3. Applications  --->
            <*> luci-app-https-dns-proxy..................... DNS Over HTTPS Proxy Web UI

        5. Protocols  --->
            <*> luci-proto-vxlan
            <*> luci-proto-wireguard........................... Support for WireGuard VPN

    Network  --->
        Routing and Redirection  --->
            <*> frr........................... The FRRouting (FRR) Software Routing Suite  --->
                -*-   frr-libfrr................................................. zebra library
                <*>   frr-bfdd............................................. bfdd routing engine
                <*>   frr-bgpd............................................. bgpd routing engine
                <*>   frr-pythontools....................................... Python reload tool
                <*>   frr-staticd....................................... staticd routing engine
                <*>   frr-vrrpd........................................... vrrpd routing engine
                <*>   frr-vtysh...................... integrated shell for frr routing software
                <*>   frr-watchfrr................................................ frr watchdog
                <*>   frr-zebra................................................... Zebra daemon

            <*> ip-full................................... Routing control utility (full)

        Time Synchronization  --->
            <*> chrony-nts.................. A versatile NTP client and server (with NTS)

        -*- https-dns-proxy..................................... DNS Over HTTPS Proxy

        VPN  --->
            <*> wireguard-tools................. WireGuard userspace control program (wg)

    Utilities
        <*> dmesg............................ print or control the kernel ring buffer
        <*> prometheus-node-exporter-lua.................... Prometheus node exporter
        <*>   prometheus-node-exporter-lua-nat_traffic
        <*>   prometheus-node-exporter-lua-netstat
        <*>   prometheus-node-exporter-lua-openwrt
        <*>   prometheus-node-exporter-lua-textfile
        <*>   prometheus-node-exporter-lua-uci_dhcp_host

差分を確認しておく

1
2
# Write the changes to diffconfig
./scripts/diffconfig.sh > diffconfig
diffconfig
  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
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
CONFIG_TARGET_mvebu=y
CONFIG_TARGET_mvebu_cortexa9=y
CONFIG_TARGET_mvebu_cortexa9_DEVICE_fortinet_fg-50e=y
CONFIG_ALL_KMODS=y
CONFIG_ALL_NONSHARED=y
CONFIG_DEVEL=y
CONFIG_AUTOREMOVE=y
CONFIG_BPF_TOOLCHAIN_BUILD_LLVM=y
# CONFIG_BPF_TOOLCHAIN_NONE is not set
CONFIG_BUILDBOT=y
CONFIG_COLLECT_KERNEL_DEBUG=y
CONFIG_FRR_INTERNAL=y
CONFIG_FRR_NO_SNMP=y
CONFIG_GNUTLS_ALPN=y
CONFIG_GNUTLS_ANON=y
CONFIG_GNUTLS_DTLS_SRTP=y
CONFIG_GNUTLS_HEARTBEAT=y
CONFIG_GNUTLS_OCSP=y
CONFIG_GNUTLS_PSK=y
CONFIG_HAS_BPF_TOOLCHAIN=y
CONFIG_HTOP_LMSENSORS=y
CONFIG_IB=y
CONFIG_IMAGEOPT=y
CONFIG_JSON_CYCLONEDX_SBOM=y
CONFIG_KERNEL_BUILD_DOMAIN="buildhost"
CONFIG_KERNEL_BUILD_USER="builder"
# CONFIG_KERNEL_KALLSYMS is not set
CONFIG_KERNEL_NET_L3_MASTER_DEV=y
CONFIG_LIBCURL_COOKIES=y
CONFIG_LIBCURL_FILE=y
CONFIG_LIBCURL_FTP=y
CONFIG_LIBCURL_HTTP=y
CONFIG_LIBCURL_MBEDTLS=y
CONFIG_LIBCURL_NGHTTP2=y
CONFIG_LIBCURL_NO_SMB="!"
CONFIG_LIBCURL_PROXY=y
CONFIG_LIBCURL_UNIX_SOCKETS=y
CONFIG_LUCI_LANG_ja=y
CONFIG_PACKAGE_cgi-io=y
CONFIG_PACKAGE_chrony-nts=y
CONFIG_PACKAGE_dmesg=y
CONFIG_PACKAGE_dnsmasq-dhcpv6=m
CONFIG_PACKAGE_frr=y
CONFIG_PACKAGE_frr-bfdd=y
CONFIG_PACKAGE_frr-bgpd=y
CONFIG_PACKAGE_frr-libfrr=y
CONFIG_PACKAGE_frr-pythontools=y
CONFIG_PACKAGE_frr-staticd=y
CONFIG_PACKAGE_frr-vrrpd=y
CONFIG_PACKAGE_frr-vtysh=y
CONFIG_PACKAGE_frr-watchfrr=y
CONFIG_PACKAGE_frr-zebra=y
CONFIG_PACKAGE_htop=y
CONFIG_PACKAGE_https-dns-proxy=y
CONFIG_PACKAGE_ip-full=y
CONFIG_PACKAGE_kmod-crypto-kpp=y
CONFIG_PACKAGE_kmod-crypto-lib-chacha20=y
CONFIG_PACKAGE_kmod-crypto-lib-chacha20poly1305=y
CONFIG_PACKAGE_kmod-crypto-lib-curve25519=y
CONFIG_PACKAGE_kmod-crypto-lib-poly1305=y
CONFIG_PACKAGE_kmod-iptunnel=y
CONFIG_PACKAGE_kmod-tcp-bbr=y
CONFIG_PACKAGE_kmod-udptunnel4=y
CONFIG_PACKAGE_kmod-udptunnel6=y
CONFIG_PACKAGE_kmod-veth=y
CONFIG_PACKAGE_kmod-vrf=y
CONFIG_PACKAGE_kmod-vxlan=y
CONFIG_PACKAGE_kmod-wireguard=y
CONFIG_PACKAGE_libatomic=y
CONFIG_PACKAGE_libbpf=y
CONFIG_PACKAGE_libbz2=y
CONFIG_PACKAGE_libcap=y
CONFIG_PACKAGE_libcares=y
CONFIG_PACKAGE_libcurl=y
CONFIG_PACKAGE_libelf=y
CONFIG_PACKAGE_libev=y
CONFIG_PACKAGE_libgmp=y
CONFIG_PACKAGE_libgnutls=y
CONFIG_PACKAGE_libiwinfo=y
CONFIG_PACKAGE_libiwinfo-data=y
CONFIG_PACKAGE_liblua=y
CONFIG_PACKAGE_liblucihttp=y
CONFIG_PACKAGE_liblucihttp-ucode=y
CONFIG_PACKAGE_libncurses=y
CONFIG_PACKAGE_libnettle=y
CONFIG_PACKAGE_libnghttp2=y
CONFIG_PACKAGE_libpcap=m
CONFIG_PACKAGE_libpcre2=y
CONFIG_PACKAGE_libpython3=y
CONFIG_PACKAGE_libreadline=y
CONFIG_PACKAGE_librt=y
CONFIG_PACKAGE_libubus-lua=y
CONFIG_PACKAGE_libuci-lua=y
CONFIG_PACKAGE_libxdp=m
CONFIG_PACKAGE_libyang=y
CONFIG_PACKAGE_lua=y
CONFIG_PACKAGE_luasocket=y
CONFIG_PACKAGE_luci=y
CONFIG_PACKAGE_luci-app-firewall=y
CONFIG_PACKAGE_luci-app-https-dns-proxy=y
CONFIG_PACKAGE_luci-app-opkg=y
CONFIG_PACKAGE_luci-base=y
CONFIG_PACKAGE_luci-i18n-base-ja=y
CONFIG_PACKAGE_luci-i18n-firewall-ja=y
CONFIG_PACKAGE_luci-i18n-https-dns-proxy-ja=y
CONFIG_PACKAGE_luci-i18n-opkg-ja=y
CONFIG_PACKAGE_luci-lib-nixio=y
CONFIG_PACKAGE_luci-light=y
CONFIG_PACKAGE_luci-mod-admin-full=y
CONFIG_PACKAGE_luci-mod-network=y
CONFIG_PACKAGE_luci-mod-status=y
CONFIG_PACKAGE_luci-mod-system=y
CONFIG_PACKAGE_luci-proto-ipv6=y
CONFIG_PACKAGE_luci-proto-ppp=y
CONFIG_PACKAGE_luci-proto-vxlan=y
CONFIG_PACKAGE_luci-proto-wireguard=y
CONFIG_PACKAGE_luci-ssl=y
CONFIG_PACKAGE_luci-theme-bootstrap=y
CONFIG_PACKAGE_more=y
CONFIG_PACKAGE_prometheus-node-exporter-lua=y
CONFIG_PACKAGE_prometheus-node-exporter-lua-nat_traffic=y
CONFIG_PACKAGE_prometheus-node-exporter-lua-netstat=y
CONFIG_PACKAGE_prometheus-node-exporter-lua-openwrt=y
CONFIG_PACKAGE_prometheus-node-exporter-lua-textfile=y
CONFIG_PACKAGE_prometheus-node-exporter-lua-uci_dhcp_host=y
CONFIG_PACKAGE_px5g-mbedtls=y
CONFIG_PACKAGE_python3-base=y
CONFIG_PACKAGE_python3-light=y
CONFIG_PACKAGE_python3-logging=y
CONFIG_PACKAGE_qosify=m
CONFIG_PACKAGE_rpcd=y
CONFIG_PACKAGE_rpcd-mod-file=y
CONFIG_PACKAGE_rpcd-mod-iwinfo=y
CONFIG_PACKAGE_rpcd-mod-luci=y
CONFIG_PACKAGE_rpcd-mod-rrdns=y
CONFIG_PACKAGE_rpcd-mod-ucode=y
CONFIG_PACKAGE_tc-tiny=m
CONFIG_PACKAGE_terminfo=y
CONFIG_PACKAGE_ucode-mod-html=y
CONFIG_PACKAGE_ucode-mod-math=y
CONFIG_PACKAGE_uhttpd=y
CONFIG_PACKAGE_uhttpd-mod-lua=y
CONFIG_PACKAGE_uhttpd-mod-ubus=y
CONFIG_PACKAGE_vxlan=y
CONFIG_PACKAGE_wireguard-tools=y
CONFIG_PACKAGE_xdp-filter=m
CONFIG_PACKAGE_xdp-loader=m
CONFIG_PACKAGE_xdpdump=m
CONFIG_PACKAGE_zlib=y
CONFIG_PCRE2_JIT_ENABLED=y
CONFIG_REPRODUCIBLE_DEBUG_INFO=y
# CONFIG_TARGET_ROOTFS_INITRAMFS is not set
# CONFIG_TARGET_ROOTFS_TARGZ is not set
CONFIG_USE_LLVM_BUILD=y
CONFIG_VERSIONOPT=y
CONFIG_VERSION_BUG_URL=""
CONFIG_VERSION_CODE=""
CONFIG_VERSION_DIST="OpenWrt"
CONFIG_VERSION_FILENAMES=y
CONFIG_VERSION_HOME_URL=""
CONFIG_VERSION_HWREV=""
CONFIG_VERSION_MANUFACTURER="naa0yama"
CONFIG_VERSION_MANUFACTURER_URL="https://github.com/naa0yama/OpenWrt-FortiGate-50E-custom-image"
CONFIG_VERSION_NUMBER=""
CONFIG_VERSION_PRODUCT=""
CONFIG_VERSION_REPO="https://downloads.openwrt.org/releases/23.05.2"
CONFIG_VERSION_SUPPORT_URL=""
# CONFIG_MAKE_TOOLCHAIN is not set
# CONFIG_SDK is not set
# CONFIG_SDK_LLVM_BPF is not set
Topic

上記差分を full config に変換して使う場合は下記とする

1
2
3
4
5
6
cd ~/builds/openwrt
# Write changes to .config
cp diffconfig .config

# Expand to full config
make defconfig

設定が終わったら make する
make dirclean は途中成果物を掃除するため試行錯誤する場合が多いと思うので仕込んでおく

1
2
make dirclean
time make -j $(($(nproc)+1))

build した squashfs ファイルは ~/builds/openwrt/bin/targets/mvebu/cortexa9/ に吐き出される 今回は openwrt-23.05.2-mvebu-cortexa9-fortinet_fg-50e-squashfs-sysupgrade.bin であった

TFTP の準備

まず条件を確認したいので Tera Term で Console を繋いで電源をつなぎます。 そうすると boot が始まり下記の状態となるためここで適当なキーを押します Please wait for OS to boot, or press any key to display configuration menu..........

Please wait for OS to boot, or press any key to display configuration menu.......... の時に押す

1
2
3
4
5
6
7
8
FortiGate-50E (17:10-06.30.2016)
Ver:05000013
Serial number: FGTXXXXXXXXXXXXX
CPU(00): 1600MHz
Total RAM: 2GB
Initializing boot device...
Initializing MAC... egiga1
Please wait for OS to boot, or press any key to display configuration menu...

下記の画面になったら R キーを押し条件を確認する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[C]: Configure TFTP parameters.
[R]: Review TFTP parameters.
[T]: Initiate TFTP firmware transfer.
[F]: Format boot device.
[I]: System information.
[B]: Boot with backup firmware and set as default.
[Q]: Quit menu and continue to boot.
[H]: Display this list of options.

Enter C,R,T,F,I,B,Q,or H:

Image download port:    WAN1
DHCP status:            Disabled
Local VLAN ID:          <NULL>
Local IP address:       192.168.1.188
Local subnet mask:      255.255.255.0
Local gateway:          192.168.1.254
TFTP server IP address: 192.168.1.168
Firmware file name:     image.out

手元の Windows で Static IP を設定し Ping で確認しておく

 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
[P]: Set firmware download port.
[D]: Set DHCP mode.
[I]: Set local IP address.
[S]: Set local subnet mask.
[G]: Set local gateway.
[V]: Set local VLAN ID.
[T]: Set remote TFTP server IP address.
[F]: Set firmware file name.
[E]: Reset TFTP parameters to factory defaults.
[R]: Review TFTP parameters.
[N]: Diagnose networking(ping).
[Q]: Quit this menu.
[H]: Display this list of options.

Enter P,D,I,S,G,V,T,F,E,R,N,Q,or H:

[1]: Ping remote TFTP server.
[2]: Ping gateway.
[3]: Ping specified IP address.
[Q]: Quit this menu.
[H]: Display this list of options.

Enter 1,2,3,Q,or H:

Using egiga1 device
host 192.168.1.100 is alive

TFTP は Serva を用意した

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[C]: Configure TFTP parameters.
[R]: Review TFTP parameters.
[T]: Initiate TFTP firmware transfer.
[F]: Format boot device.
[I]: System information.
[B]: Boot with backup firmware and set as default.
[Q]: Quit menu and continue to boot.
[H]: Display this list of options.

Enter C,R,T,F,I,B,Q,or H:

Please connect TFTP server to Ethernet port 'WAN1'.

MAC: 00:00:5E:00:53:00

Connect to tftp server 192.168.1.100 ...


###########
Image Received.
Checking image... OK
Save as Default firmware/Backup firmware/Run image without saving:[D/B/R]?R

Save as Default firmware/Backup firmware/Run image without saving:[D/B/R]? が表示されたら今回は起動のみできれば良いため、 R を入力

起動が完了すると、下記の画面になり LAN 側 Port が全て br-lan に所属し管理画面が 192.168.1.1 であったので SSH でアクセスする

FortiGate の霊圧がきえる

念のため、 DD でバックアップし SCP で母艦に転送しておく

 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
root@OpenWrt:/# mkdir /tmp/mtd
root@OpenWrt:/# cd /tmp/mtd
root@OpenWrt:/tmp/mtd# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 001c0000 00010000 "u-boot"
mtd1: 00010000 00010000 "firmware-info"
mtd2: 00010000 00010000 "dtb"
mtd3: 00010000 00010000 "u-boot-env"
mtd4: 00010000 00010000 "board-info"
mtd5: 00600000 00010000 "kernel"
mtd6: 01800000 00010000 "rootfs"
mtd7: 00600000 00010000 "kn2"
mtd8: 01800000 00010000 "rfs2"
mtd9: 01200000 00010000 "part1"
mtd10: 01200000 00010000 "part2"
mtd11: 01e00000 00010000 "config"
root@OpenWrt:/tmp/mtd# dd if=/dev/mtdblock1 of=mtd1_firmware-info.bin
128+0 records in
128+0 records out
root@OpenWrt:/tmp/mtd# dd if=/dev/mtdblock5 of=mtd5_kernel.bin
12288+0 records in
12288+0 records out
root@OpenWrt:/tmp/mtd# dd if=/dev/mtdblock6 of=mtd6_rootfs.bin
49152+0 records in
49152+0 records out
root@OpenWrt:/tmp/mtd# ll
drwxr-xr-x    2 root     root           100 Jan 13 11:06 ./
drwxrwxrwt   16 root     root           440 Jan 13 11:04 ../
-rw-r--r--    1 root     root         65536 Jan 13 11:06 mtd1_firmware-info.bin
-rw-r--r--    1 root     root       6291456 Jan 13 11:06 mtd5_kernel.bin
-rw-r--r--    1 root     root      25165824 Jan 13 11:07 mtd6_rootfs.bin

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
dd if=/dev/mtdblock0  of=mtd0_u-boot.bin
dd if=/dev/mtdblock1  of=mtd1_firmware-info.bin
dd if=/dev/mtdblock2  of=mtd2_dtb.bin
dd if=/dev/mtdblock3  of=mtd3_u-boot-env.bin
dd if=/dev/mtdblock4  of=mtd4_board-info.bin
dd if=/dev/mtdblock5  of=mtd5_kernel.bin
dd if=/dev/mtdblock6  of=mtd6_rootfs.bin
dd if=/dev/mtdblock7  of=mtd7_kn2.bin
dd if=/dev/mtdblock8  of=mtd8_rfs2.bin
dd if=/dev/mtdblock9  of=mtd9_part1.bin
dd if=/dev/mtdblock10 of=mtd10_part2.bin
dd if=/dev/mtdblock11 of=mtd11_config.bin
Topic

バックアップをデバイスに書き戻す際は、mtd コマンドを用いて書き込む

1
2
3
4
5
mtd write <backup image> <target partition>

例)
mtd write mtd1_firmware-info.bin firmware-info
mtd verify mtd1_firmware-info.bin firmware-info    # 書き込まれたデータが元データと一致するか検証

SCP で /tmp 宛に openwrt-23.05.2-mvebu-cortexa9-fortinet_fg-50e-squashfs-sysupgrade.bin を転送する その後、下記コマンドで fireware を上書きインストールする

1
/sbin/sysupgrade /tmp/openwrt-23.05.2-mvebu-cortexa9-fortinet_fg-50e-squashfs-sysupgrade.bin

実行すると、コンソールが流れていき起動できる

OpenWRT !!!

FortiOS が起動した場合は Please wait for OS to boot, or press any key to display configuration menu... のタイミングでなにかキーを押して、[B]: Boot with backup firmware and set as default. を選択すると OpenWRT が起動するはず。

デフォルトでは 192.168.1.1 で管理画面が拝める ID: root, PW: 空欄 でログインできる

念のため確認しておく

 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
49
50
51
52
53
54
55
56
57
root@OpenWrt:~# cat /etc/os-release
NAME="OpenWrt"
VERSION="23.05.2"
ID="openwrt"
ID_LIKE="lede openwrt"
PRETTY_NAME="OpenWrt 23.05.2"
VERSION_ID="23.05.2"
HOME_URL="https://openwrt.org/"
BUG_URL="https://bugs.openwrt.org/"
SUPPORT_URL="https://forum.openwrt.org/"
BUILD_ID="r23630-842932a63d"
OPENWRT_BOARD="mvebu/cortexa9"
OPENWRT_ARCH="arm_cortex-a9_vfpv3-d16"
OPENWRT_TAINTS=""
OPENWRT_DEVICE_MANUFACTURER="naa0yama"
OPENWRT_DEVICE_MANUFACTURER_URL="https://github.com/naa0yama"
OPENWRT_DEVICE_PRODUCT="Generic"
OPENWRT_DEVICE_REVISION="v0"
OPENWRT_RELEASE="OpenWrt 23.05.2 r23630-842932a63d"


root@OpenWrt:~# lsmod | grep -E '^(veth|vrf|vxlan|wireguard)'
veth                   24576  0
vrf                    24576  0 [permanent]
vxlan                  53248  0
wireguard              57344  0


root@OpenWrt:~# opkg list-installed | grep -E '^(frr|ip-full|tailscale|wireguard
|dmesg)'
dmesg - 2.39-2
frr - 8.5.1-1
frr-bfdd - 8.5.1-1
frr-bgpd - 8.5.1-1
frr-libfrr - 8.5.1-1
frr-pythontools - 8.5.1-1
frr-staticd - 8.5.1-1
frr-vrrpd - 8.5.1-1
frr-vtysh - 8.5.1-1
frr-watchfrr - 8.5.1-1
frr-zebra - 8.5.1-1
ip-full - 6.3.0-1
tailscale - 1.50.0-1
tailscaled - 1.50.0-1
wireguard-tools - 1.0.20210914-2


root@OpenWrt:~# ip link add dev mgmt type vrf table 10
root@OpenWrt:~# ip link set dev mgmt up
root@OpenWrt:~# ip link show type vrf
18: mgmt: <NOARP,MASTER,UP,LOWER_UP> mtu 65575 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 00:00:5E:00:53:00 brd ff:ff:ff:ff:ff:ff

root@OpenWrt:~# ip vrf list
Name              Table
-----------------------
mgmt                10

参考情報

Built with Hugo
テーマ StackJimmy によって設計されています。