Web Analytics

openwrt-configurator

⭐ 89 stars Korean by jasrusable

OpenWrt 구성 도구

OpenWrt 구성 도구는 CLI 도구이자 해당 JSON 구성 파일로, UCI 구성, 패키지 및 펌웨어 버전을 포함한 네트워크 전체 상태를 단일 UCI 유사 JSON 구성 파일로 지정할 수 있으며, OpenWrt 구성 도구를 사용하여 OpenWrt 장치에 프로비저닝할 수 있습니다.

$ openwrt-configurator provision ./network-config.json
JSON 구성 파일은 .if 및/또는 .overrides 키를 사용하여 조건부로 구성할 수 있으며, 장치 이더넷 포트 및 Wi-Fi 라디오에 대한 경량 추상화를 구현하여 단일 JSON 구성 파일에서 여러 장치, 서로 다른 장치 모델/유형 및 서로 다른 장치 역할(라우터, 스위치, 덤프-AP 등)에 대한 구성을 원활하게 지원합니다.

  "interface": [
    {
      ".if": "device.tag.role == 'router'", // Apply the pppoe interface to only the router.
      ".name": "wan",
      "device": "eth0",
      "proto": "pppoe",
      "username": "me@pppoe.com",
      "password": "123"
    },
    {
      ".name": "lan",
      "device": "br-lan.1",
      ".overrides": [
        {
          ".if": "device.tag.role == 'router'", // Apply a static ip to only the router.
          "override": {
            "proto": "static",
            "ipaddr": "10.0.0.1",
            "netmask": "255.255.0.0"
          }
        },
        {
          ".if": "device.tag.role != 'router'", // Apply dhcp to all non-router devices.
          "override": {
            "proto": "dhcp"
          }
        }
      ]
    },
  ]

기능

시작하기

$ openwrt-configurator print-uci-commands ./network-config.json

device my-ap

apk del --rdepends firewall firewall4 uci set system.system0=system uci set system.system0.hostname='my-ap' uci set system.system0.timezone='Africa/Johannesburg' uci set network.switch0=switch uci set network.switch0.name='switch0' uci set network.switch0.reset='1' uci set network.switch0.enable_vlan='1' ...
참고: 이 명령이 작동하려면 각 장치의 provisioning_config 섹션에 SSH 세부 정보가 올바르게 구성되어 있어야 합니다.

$ openwrt-configurator provision ./network-config.json
Provisioning device "my-ap" @ root@10.0.0.218
Connecting over SSH...
Connected.
Verifying device...
Verified.
Setting configuration...
Configuration set.
Provisioning completed.
...
참고: 이 명령이 작동하려면 각 장치의 provisioning_config 섹션에 SSH 정보가 올바르게 구성되어 있어야 합니다.

작동 방식

  "devices": [
    {
      "model_id": "ubnt,edgerouter-x",
      "ipaddr": "10.0.0.1",
      "tags": { "role": "router" }, // Give the Edgerouter a tag with role of "router".
      "hostname": "my-router",
      "provisioning_config": {
        "ssh_auth": {
          "username": "root",
          "password": "123"
        }
      }
    },
    {
      "model_id": "tplink,eap245-v3",
      "ipaddr": "10.0.0.218",
      "tags": { "role": "ap" }, // Give the EAP245 a tag with role of "ap".
      "hostname": "my-ap",
      "provisioning_config": {
        "ssh_auth": {
          "username": "root",
          "password": "123"
        }
      }
    }
  ],

  "package_profiles": [
    {
      ".if": "device.tag.role == 'router'", // Install sqm and https-dns-proxy on the router.
      "packages": [
        "sqm-scripts",
        "luci-app-sqm",
        "https-dns-proxy",
        "luci-app-https-dns-proxy"
      ]
    },
    {
      ".if": "device.tag.role == 'ap'", // Uninstall firewall packages from ap's.
      "packages": ["-firewall", "-firewall4"]
    }
  ],

  "config": {
    "dropbear": {
      "dropbear": [
        {
          "PasswordAuth": "on",
          "RootPasswordAuth": "on",
          "Port": 22,
          "BannerFile": "/etc/banner"
        }
      ]
    },
    "system": {
      "system": [
        {
          "timezone": "Africa/Johannesburg"
        }
      ]
    },
    "interface": [
      {
        ".name": "loopback",
        "device": "lo",
        "proto": "static",
        "ipaddr": "127.0.0.1",
        "netmask": "255.0.0.0"
      },
      {
        ".if": "device.tag.role == 'router'", // Apply the pppoe interface to only the router.
        ".name": "wan",
        "device": "eth0",
        "proto": "pppoe",
        "username": "me@pppoe.com",
        "password": "123"
      },
      {
        ".name": "lan",
        "device": "br-lan.1",
        ".overrides": [
          {
            ".if": "device.tag.role == 'router'", // Apply a static ip to only the router.
            "override": {
              "proto": "static",
              "ipaddr": "10.0.0.1",
              "netmask": "255.255.0.0"
            }
          },
          {
            ".if": "device.tag.role != 'router'", // Apply dhcp to all non-router devices.
            "override": {
              "proto": "dhcp"
            }
          }
        ]
      }
    ],
    "wireless": {
      ".if": "device.tag.role == 'ap'", // Applies the entire "wireless" object to only devices with the "ap" tag set.
      "wifi-device": [
        {
          ".name": "radio0",
          "band": "2g"
        },
        {
          ".name": "radio1",
          "band": "5g"
        }
      ],
      "wifi-iface": [
        {
          "mode": "ap",
          "device": ["radio0", "radio1"],
          "network": "lan",
          "ssid": "my-ssid",
          "encryption": "psk2",
          "key": "123456789"
        },
        {
          "mode": "ap",
          "device": ["radio0", "radio1"],
          "network": "guest",
          "ssid": "my-ssid-guest",
          "encryption": "none"
        }
      ]
    }
  }

로드맵

단기

장기

--- Tranlated By Open Ai Tx | Last indexed: 2026-05-05 ---