Jump to content
  • 0

RCI Задать конфигурацию Wireguard


avn

Question

Добрый день!

Подскажите, пожалуйста, как можно через rci изменить следующие параметры конфигурации ip, ipv6, public-key, private-key?

{
	"Wireguard2": {
		"address": "172.16.0.2",
		"mask": "255.255.255.255",
		"ipv6": {
			"addresses": [
				{
					"address": "2606:4700:",
					"prefix-length": 128
				}
			]
		},
		"wireguard": {
			"private-key": "ewewewwe",
			"public-key": "vVCSNKvpgGioEPUm"
		}
	}
}

И где взять имя реального интерфейса nwg2?

 

Link to comment
Share on other sites

21 answers to this question

Recommended Posts

  • 0
14 минуты назад, avn сказал:

И где взять имя реального интерфейса nwg2?

Под Entware есть - wg (он в opkg install wireguard-tools), возможно через нее по peer

Скрытый текст
/opt/bin # ls -l
-rwxr-xr-x    1 root     root         81496 Feb  7  2024 wg
-rwxr-xr-x    1 root     root         13468 Aug 24  2023 wg-quick
/opt/bin #

/opt/bin # wg
interface: nwg0
  public key: wpEq.......N5mEo=
  private key: (hidden)
  listening port: 65100

peer: bm.....fgyo=
  endpoint: ххх.ххх.ххх.ххх:хххх
  allowed ips: 0.0.0.0/0, 10.10.132.0/24, 10.16.130.29/32, 192.168.130.0/24
  latest handshake: 1 minute, 38 seconds ago
  transfer: 3.46 GiB received, 39.81 MiB sent
  persistent keepalive: every 2 minutes

 

 

Link to comment
Share on other sites

  • 0

@Le ecureuil  это ошибка?

 

> POST /rci/interface/Wireguard2/ipv6 HTTP/1.1
> Host: localhost:79
> User-Agent: curl/8.8.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 25
>
< HTTP/1.1 400 Bad Request
< Server: Web server
< Date: Fri, 23 Aug 2024 09:07:32 GMT
< Content-Length: 70
< Connection: keep-alive
< X-Detail: 0xccad, invalid payload
<
* The requested URL returned error: 400
curl: (22) The requested URL returned error: 400

 

Link to comment
Share on other sites

  • 0
41 минуту назад, avn сказал:

@Le ecureuil  это ошибка?

 

> POST /rci/interface/Wireguard2/ipv6 HTTP/1.1
> Host: localhost:79
> User-Agent: curl/8.8.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 25
>
< HTTP/1.1 400 Bad Request
< Server: Web server
< Date: Fri, 23 Aug 2024 09:07:32 GMT
< Content-Length: 70
< Connection: keep-alive
< X-Detail: 0xccad, invalid payload
<
* The requested URL returned error: 400
curl: (22) The requested URL returned error: 400

 

А что в отправили в качестве данных POST-запроса?

Если Wireguard2 существует и авторизация не требуется (у пользователя admin нет пароля), то вроде такой вариант работает, да:

Скрытый текст
➜  ~ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":[{"auto":true}],"prefix":[{"auto":false}]}'
{
  "address": [
    {
      "status": [
        {
          "status": "message",
          "code": "39387636",
          "ident": "Network::Interface::Ip6",
          "message": "\"Wireguard2\": accept address provided by the interface network."
        }
      ]
    }
  ],
  "prefix": [
    {
      "status": [
        {
          "status": "message",
          "code": "39387736",
          "ident": "Network::Interface::Ip6",
          "message": "\"Wireguard2\": ignore prefixes provided by the interface network."
        }
      ]
    }
  ]
}

 

 

Если нужна авторизация, то вернется код 401, не 400:

Скрытый текст
➜  ~ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":[{"auto":true}],"prefix":[{"auto":false}]}'
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>Web server</center>
</body>
</html>

 

 

Это curl на компьютере, не на самом Кинетике, но разницы быть не должно

Link to comment
Share on other sites

  • 0
24 минуты назад, eralde сказал:

А что в отправили в качестве данных POST-запроса?

Если Wireguard2 существует и авторизация не требуется (у пользователя admin нет пароля), то вроде такой вариант работает, да:

  Показать содержимое
➜  ~ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":[{"auto":true}],"prefix":[{"auto":false}]}'
{
  "address": [
    {
      "status": [
        {
          "status": "message",
          "code": "39387636",
          "ident": "Network::Interface::Ip6",
          "message": "\"Wireguard2\": accept address provided by the interface network."
        }
      ]
    }
  ],
  "prefix": [
    {
      "status": [
        {
          "status": "message",
          "code": "39387736",
          "ident": "Network::Interface::Ip6",
          "message": "\"Wireguard2\": ignore prefixes provided by the interface network."
        }
      ]
    }
  ]
}

 

 

Если нужна авторизация, то вернется код 401, не 400:

  Показать содержимое
➜  ~ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":[{"auto":true}],"prefix":[{"auto":false}]}'
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>Web server</center>
</body>
</html>

 

 

Это curl на компьютере, не на самом Кинетике, но разницы быть не должно

Спасибо, разобрался. Виноват json. 

  • Upvote 1
Link to comment
Share on other sites

  • 0
1 час назад, eralde сказал:

А что в отправили в качестве данных POST-запроса?

Если Wireguard2 существует и авторизация не требуется (у пользователя admin нет пароля), то вроде такой вариант работает, да:

  Скрыть содержимое
➜  ~ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":[{"auto":true}],"prefix":[{"auto":false}]}'
{
  "address": [
    {
      "status": [
        {
          "status": "message",
          "code": "39387636",
          "ident": "Network::Interface::Ip6",
          "message": "\"Wireguard2\": accept address provided by the interface network."
        }
      ]
    }
  ],
  "prefix": [
    {
      "status": [
        {
          "status": "message",
          "code": "39387736",
          "ident": "Network::Interface::Ip6",
          "message": "\"Wireguard2\": ignore prefixes provided by the interface network."
        }
      ]
    }
  ]
}

 

 

Если нужна авторизация, то вернется код 401, не 400:

  Скрыть содержимое
➜  ~ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":[{"auto":true}],"prefix":[{"auto":false}]}'
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>Web server</center>
</body>
</html>

 

 

Это curl на компьютере, не на самом Кинетике, но разницы быть не должно

Все таки не получается поменять адрес

curl -vkfsS "http://localhost:79/rci/interface/$KNIFID/ipv6" --header "Content-Type: application/json" -X POST --data-raw '{"address":"2001::34"}'

 

{
  "address": {
    "status": [
      {
        "status": "error",
        "code": "7471107",
        "ident": "Command::Root",
        "message": "no input [http/rci]."
      }
    ]
  }

 

Как правильно?

Link to comment
Share on other sites

  • 0
26 минут назад, avn сказал:

Все таки не получается поменять адрес

curl -vkfsS "http://localhost:79/rci/interface/$KNIFID/ipv6" --header "Content-Type: application/json" -X POST --data-raw '{"address":"2001::34"}'

 

{
  "address": {
    "status": [
      {
        "status": "error",
        "code": "7471107",
        "ident": "Command::Root",
        "message": "no input [http/rci]."
      }
    ]
  }

 

Как правильно?

Вот такие варианты работают:

➜ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":[{"address": "2001::34"}]}'
{
  "address": [
    {
      "status": [
        {
          "status": "message",
          "code": "39387236",
          "ident": "Network::Interface::Ip6",
          "message": "\"Wireguard2\": added static address 2001::34."
        }
      ]
    }
  ]
}
➜ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":{"address": "2001::34"}}'
{
  "address": {
    "status": [
      {
        "status": "message",
        "code": "39387236",
        "ident": "Network::Interface::Ip6",
        "message": "\"Wireguard2\": added static address 2001::34."
      }
    ]
  }
}

 

Можно ориентироваться на то, что отправляет веб-интерфейс для других подключений, где настраивается IPv6

Link to comment
Share on other sites

  • 0
12 минуты назад, eralde сказал:

Вот такие варианты работают:

➜ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":[{"address": "2001::34"}]}'
{
  "address": [
    {
      "status": [
        {
          "status": "message",
          "code": "39387236",
          "ident": "Network::Interface::Ip6",
          "message": "\"Wireguard2\": added static address 2001::34."
        }
      ]
    }
  ]
}
➜ curl -X POST http://192.168.24.1/rci/interface/Wireguard2/ipv6 \
     -H "Content-Type: application/json" \
     -d '{"address":{"address": "2001::34"}}'
{
  "address": {
    "status": [
      {
        "status": "message",
        "code": "39387236",
        "ident": "Network::Interface::Ip6",
        "message": "\"Wireguard2\": added static address 2001::34."
      }
    ]
  }
}

 

Можно ориентироваться на то, что отправляет веб-интерфейс для других подключений, где настраивается IPv6

У меня не работает, возможно версия старовата. А теперь я хочу объединить два запроса.

Было:

curl -kfsS "http://localhost:79/rci/interface/$KNIFID/ip" --header "Content-Type: application/json" -X POST --data-raw '{"address":"${IPv4}","mask":"1255.255.255.255"}'

Стало:

curl -v "http://localhost:79/rci/interface/$KNIFID" --header "Content-Type: application/json" -X POST -d '[{"ip":{"address":"${IPv4}","mask":"255.255.255.255"}}]'

Второй вариант не работает, что не так?

Link to comment
Share on other sites

  • 0
1 минуту назад, avn сказал:

У меня не работает, возможно версия старовата. А теперь я хочу объединить два запроса.

Было:

curl -kfsS "http://localhost:79/rci/interface/$KNIFID/ip" --header "Content-Type: application/json" -X POST --data-raw '{"address":"${IPv4}","mask":"1255.255.255.255"}'

Стало:

curl -v "http://localhost:79/rci/interface/$KNIFID" --header "Content-Type: application/json" -X POST -d '[{"ip":{"address":"${IPv4}","mask":"255.255.255.255"}}]'

Второй вариант не работает, что не так?

Нужно завернуть всё ещё в один address:

Скрытый текст
curl -X POST http://192.168.24.1/rci/interface/Wireguard2 \
     -H "Content-Type: application/json" \
     -d '{"ip": {"address":{"address": "1.2.3.4", "mask": "255.255.255.0"}}}'
{
  "ip": {
    "address": {
      "status": [
        {
          "status": "message",
          "code": "72220674",
          "ident": "Network::Interface::Ip",
          "message": "\"Wireguard2\": IP address is 1.2.3.4/24."
        }
      ]
    }
  }

 

 

Link to comment
Share on other sites

  • 0
12 минуты назад, eralde сказал:

Нужно завернуть всё ещё в один address:

  Скрыть содержимое
curl -X POST http://192.168.24.1/rci/interface/Wireguard2 \
     -H "Content-Type: application/json" \
     -d '{"ip": {"address":{"address": "1.2.3.4", "mask": "255.255.255.0"}}}'
{
  "ip": {
    "address": {
      "status": [
        {
          "status": "message",
          "code": "72220674",
          "ident": "Network::Interface::Ip",
          "message": "\"Wireguard2\": IP address is 1.2.3.4/24."
        }
      ]
    }
  }

 

 

Спасибо. Все получилось. Виноват апостроф.

"[{\"ip\":{\"address\":{\"address\":\"${IPv4}\",\"mask\":\"255.255.255.255\"}}},{\"ipv6\":{\"address\":{\"address\":\"${IPv6}\"}}}]"

 

  • Upvote 1
Link to comment
Share on other sites

  • 0
Posted (edited)
1 час назад, eralde сказал:

Нужно завернуть всё ещё в один address:

  Показать содержимое
curl -X POST http://192.168.24.1/rci/interface/Wireguard2 \
     -H "Content-Type: application/json" \
     -d '{"ip": {"address":{"address": "1.2.3.4", "mask": "255.255.255.0"}}}'
{
  "ip": {
    "address": {
      "status": [
        {
          "status": "message",
          "code": "72220674",
          "ident": "Network::Interface::Ip",
          "message": "\"Wireguard2\": IP address is 1.2.3.4/24."
        }
      ]
    }
  }

 

 

 

 rci/interface/Wireguard2

[
	{
		"ip": {
			"address": {
				"address": "172.16.0.2",
				"mask": "255.255.255.255"
			}
		}
	},
	{
		"ipv6": {
			"address": {
				"address": "2606:4700:110::822"
			}
		}
	},
	{
		"private-key": {
			"private-key": "vVCSNKvpgGioEcOaNTFw="
		}
	}
]

Ошибка - { "status": [ { "status": "error", "code": "1179781", "ident": "Core::Configurator", "message": "not found: \"interface/private-key\" [http/rci]." } ] }

Что не так?

Edited by avn
Link to comment
Share on other sites

  • 0
5 минут назад, avn сказал:

Попробовал rci/interface/Wireguard2/private-key - результат

{ "status": [ { "status": "error", "code": "1179781", "ident": "Core::Configurator", "message": "not found: \"interface/private-key\" [http/rci]." } ] }

Что опять не так?

Посмотрите, пожалуйста, как это делает веб-интерфейс. В большинстве случаев это самый быстрый способ понять, какой формат данных требуется.

Скрытый текст

 

  • Upvote 1
Link to comment
Share on other sites

  • 0
Только что, eralde сказал:

Посмотрите, пожалуйста, как это делает веб-интерфейс. В большинстве случаев это точно самый быстрый способ понять, какой формат данных требуется.

 

Спасибо, у меня сейчас нету доступа к веб-интерфейсу. Сижу в entware. Буду дома будет проще. Спасибо за помощь.

  • Thanks 1
Link to comment
Share on other sites

  • 0
3 часа назад, eralde сказал:

Посмотрите, пожалуйста, как это делает веб-интерфейс. В большинстве случаев это самый быстрый способ понять, какой формат данных требуется.

 

А то, чего нету в интерфейсе, например:

Скрытый текст

interface Wireguard2 wireguard peer bXwPfgyo=
client-id send 60255

interface Wireguard2 wireguard peer bXwPfgyo=
client-id send 6059255

 

?

Link to comment
Share on other sites

  • 0
14 часа назад, avn сказал:

А то, чего нету в интерфейсе, например:

  Показать содержимое

interface Wireguard2 wireguard peer bXwPfgyo=
client-id send 60255

interface Wireguard2 wireguard peer bXwPfgyo=
client-id send 6059255

 

?

Спасибо. Разобрался.

  • Upvote 1
Link to comment
Share on other sites

  • 0
17 часов назад, avn сказал:

А то, чего нету в интерфейсе, например:

  Показать содержимое

?

Тут придется действовать по аналогии.
Можно настроить нужный кусок через CLI/WebCLI, потом прочитать GET-запросом нужный кусок конфигурации (тоже через WebCLI или открыть ссылку вида <IP>/rci/... в браузере) и ориентироваться на тот формат, который выдаст браузер.

 

Link to comment
Share on other sites

  • 0
2 часа назад, eralde сказал:

Тут придется действовать по аналогии.
Можно настроить нужный кусок через CLI/WebCLI, потом прочитать GET-запросом нужный кусок конфигурации (тоже через WebCLI или открыть ссылку вида <IP>/rci/... в браузере) и ориентироваться на тот формат, который выдаст браузер.

 

Отправка запроса:

curl -kfsS "http://localhost:79/rci/interface/Wireguard2" --header "Content-Type: application/json" -X POST --data-raw '[{"wireguard":{"peer":{"key":"bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=","client-id":{"send":123}}}}]' 

Приводит к сбросу поля Comment.

До запроса:

image.png.08bd5b8c57bbfa0338be8122a53d242f.png

После:

image.png.27966c70bb764ba204368a616d54863a.png

Как избежать такого поведения?

Link to comment
Share on other sites

  • 0
18 часов назад, avn сказал:

Отправка запроса:

curl -kfsS "http://localhost:79/rci/interface/Wireguard2" --header "Content-Type: application/json" -X POST --data-raw '[{"wireguard":{"peer":{"key":"bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=","client-id":{"send":123}}}}]' 

Приводит к сбросу поля Comment.

Как избежать такого поведения?

Добавьте текущее значение comment в запрос:

curl -kfsS "http://192.168.80.50/rci/interface?name=wg0" --header "Content-Type: application/json" -X POST --data-raw '[{"wireguard":{"peer":[{"key":"bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=", "comment": "my-comment", "client-id": "1450150"}]}}]'

 

Link to comment
Share on other sites

  • 0
43 минуты назад, eralde сказал:

Добавьте текущее значение comment в запрос:

curl -kfsS "http://192.168.80.50/rci/interface?name=wg0" --header "Content-Type: application/json" -X POST --data-raw '[{"wireguard":{"peer":[{"key":"bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=", "comment": "my-comment", "client-id": "1450150"}]}}]'

 

Это решение лежит на поверхности. Но мне кажется это неправильно. Будет исправлено в следующих версиях? Или может можно по другому идентифицировать пира?

Link to comment
Share on other sites

  • 0
23 минуты назад, avn сказал:

Это решение лежит на поверхности. Но мне кажется это неправильно. Будет исправлено в следующих версиях? Или может можно по другому идентифицировать пира?

@Le ecureuil

Link to comment
Share on other sites

  • 0

@Le ecureuil Как можно идентифицировать пира, что бы при этом не менялось поле коммент (если его не отправлять)?

 

http://localhost:79/rci/interface/Wireguard2
[
	{
		"wireguard": {
			"peer": {
				"key": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=",
				"client-id": {
					"send": 123
				}
			}
		}
	}
]

Может есть вариант, типа такого?

http://localhost:79/rci/interface/Wireguard2
[
	{
		"wireguard": {
			"peer": {
				"id": "0",
				"client-id": {
					"send": 123
				}
			}
		}
	}
]

 

Link to comment
Share on other sites

  • 0
В 26.08.2024 в 14:13, avn сказал:

@Le ecureuil Как можно идентифицировать пира, что бы при этом не менялось поле коммент (если его не отправлять)?

 

http://localhost:79/rci/interface/Wireguard2
[
	{
		"wireguard": {
			"peer": {
				"key": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=",
				"client-id": {
					"send": 123
				}
			}
		}
	}
]

Может есть вариант, типа такого?

http://localhost:79/rci/interface/Wireguard2
[
	{
		"wireguard": {
			"peer": {
				"id": "0",
				"client-id": {
					"send": 123
				}
			}
		}
	}
]

 

4.2b3 не исправлено

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...