7.8 Программно-определяемый маршрутизатор (Edge)
Edge - это программно-определяемый маршрутизатор, ключевыми функциями которого являются NAT и firewall. В таблице 1 представлено описание объекта Edge.
name | value | type |
---|---|---|
id | d57aede6-3ae4-11ec-b428-a6817c1fefc2 | UUID |
modified | 1562760517 | timestamp (unix time) |
deploy_ts | 1562760527 | timestamp (unix time) |
oper_ts | 1562760520 | timestamp (unix time) |
oper_status | 3 | integer |
oper_progress | 100 | integer |
ports | ||
vdc_id | 1009 | integer |
Свойство modified - время модификации программно-определяемого маршрутизатора.
Свойство deploy_ts - время применения правил программно-определяемого маршрутизатора.
Свойство oper_ts - время изменения свойства oper_status.
Свойство oper_status - фактическое состояние программно-определяемого маршрутизатора в соответствии со словарем из vm-statuses().
Свойство vdc_id - опциональная принадлежность программно-определяемого маршрутизатора к конкретному ВЦОД. В этом случае управлять данным маршрутизатором могут все пользователи, которым назначена роль Админа ВЦОД в указанном ВЦОД.
Описание объекта ports приведено в таблице 2.
name | value | type |
---|---|---|
address | 10.20.30.40 | inet |
ifname | 10293 | integer |
ratelimit_mbits | 4096 | integer |
Статические словари, используемые в запросах, представлены в таблицах ниже.
id | name |
---|---|
1 | in |
2 | out |
id | name |
---|---|
1 | block |
2 | pass |
id | name |
---|---|
1 | SNAT |
2 | DNAT |
3 | biNAT |
id | name |
---|---|
1 | icmp |
2 | udp |
3 | tcp |
4 | ip |
Методы¶
7.8.1 edge-create()¶
Данный метод позволяет создать программно-определяемый маршрутизатор.
Первым слотом должен быть указан порт маршрутизируемой сети. В последующих слотах возможно указание внутренних сетей, для них обязательно отключение свойства ip_guard.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-create",
"id": "d10f8b0e-3ae4-11ec-a52e-80e47fd49235",
"params": {
"network_ports" : [
{
"network_id": 101,
"slot": 1,
"ratelimit_mbits": 512
},
{
"network_id": 161,
"slot": 2,
"ip_guard": false
},
{
"network_id": 162,
"slot": 3,
"ip_guard": false
}
]
}
}
Ответ:
{
"id": "d10f8b0e-3ae4-11ec-a52e-80e47fd49235",
"jsonrpc": "2.0",
"result": {
"code": 1,
"data": {
"edge_id": "d57aede6-3ae4-11ec-b428-a6817c1fefc2"
}
}
}
Запрос с указанием принадлежности Edge к конкретному ВЦОД:
{
"jsonrpc": "2.0",
"method": "edge-create",
"id": "251542a8-debc-11ed-b792-89c4d554e1c8",
"params": {
"vdc_id": 14,
"network_ports" : [
{
"network_id": 1,
"slot": 1
},
{
"network_id": 812,
"slot": 2,
"ip_guard": 0
}
]
}
}
Ответ:
{
"id" : "251542a8-debc-11ed-b792-89c4d554e1c8",
"jsonrpc" : "2.0",
"result" : {
"code" : 1,
"data" : {
"edge_id" : "5d220190-debc-11ed-a74c-6112f8825f81"
}
}
}
7.8.2 edge-list()¶
С помощью метода edge-list() можно получить список маршрутизаторов, содержащий как индивидуальные объекты Edge, так и принадлежащие ВЦОД, в которых пользователю назначена роль Админа ВЦОД.
Запрос:
Ответ:
{
"id" : "67254a90-df65-11ed-9e7a-dadcd554e1c8",
"jsonrpc" : "2.0",
"result" : {
"code" : 1,
"data" : {
"4f3f3152-df65-11ed-803d-9b00f8825f81" : {
"deploy_ts" : 1681986201,
"modified" : 1681986174,
"oper_progress" : 100,
"oper_status" : 3,
"oper_ts" : 1681986176,
"ports" : {
"1" : {
"address" : "10.78.28.32",
"ifname" : 21743,
"network_id" : 1,
"port_id" : 21743,
"ratelimit_mbits" : null,
"slot" : 5
},
"777" : {
"address" : "10.200.200.2",
"ifname" : 21744,
"network_id" : 777,
"port_id" : 21744,
"ratelimit_mbits" : null,
"slot" : 6
}
},
"vdc_id" : null
},
"5d220190-debc-11ed-a74c-6112f8825f81" : {
"deploy_ts" : 1681913724,
"modified" : 1681913612,
"oper_progress" : 100,
"oper_status" : 3,
"oper_ts" : 1681913614,
"ports" : {
"1" : {
"address" : "10.78.28.29",
"ifname" : 21740,
"network_id" : 1,
"port_id" : 21740,
"ratelimit_mbits" : null,
"slot" : 5
},
"812" : {
"address" : "10.200.200.2",
"ifname" : 21741,
"network_id" : 812,
"port_id" : 21741,
"ratelimit_mbits" : null,
"slot" : 6
}
},
"vdc_id" : 14
}
}
}
}
Ответ по умолчанию является словарем с ключом по идентификатору сети, что может быть неудобно для маршрутизатора с несколькими портами из одной сети. Для такого случая предусмотрен альтернативный вариант ответа со словарем по идентификатору порта.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-list",
"id": "933258a8-df65-11ed-8e85-f3ded554e1c8",
"params": {
"port_based": 1
}
}
Ответ:
{
"id" : "933258a8-df65-11ed-8e85-f3ded554e1c8",
"jsonrpc" : "2.0",
"result" : {
"code" : 1,
"data" : {
"4f3f3152-df65-11ed-803d-9b00f8825f81" : {
"deploy_ts" : 1681986286,
"modified" : 1681986174,
"oper_progress" : 100,
"oper_status" : 3,
"oper_ts" : 1681986176,
"ports" : {
"21743" : {
"address" : "10.78.28.32",
"ifname" : 21743,
"network_id" : 1,
"port_id" : 21743,
"ratelimit_mbits" : null,
"slot" : 5
},
"21744" : {
"address" : "10.200.200.2",
"ifname" : 21744,
"network_id" : 777,
"port_id" : 21744,
"ratelimit_mbits" : null,
"slot" : 6
}
},
"vdc_id" : null
},
"5d220190-debc-11ed-a74c-6112f8825f81" : {
"deploy_ts" : 1681913724,
"modified" : 1681913612,
"oper_progress" : 100,
"oper_status" : 3,
"oper_ts" : 1681913614,
"ports" : {
"21740" : {
"address" : "10.78.28.29",
"ifname" : 21740,
"network_id" : 1,
"port_id" : 21740,
"ratelimit_mbits" : null,
"slot" : 5
},
"21741" : {
"address" : "10.200.200.2",
"ifname" : 21741,
"network_id" : 812,
"port_id" : 21741,
"ratelimit_mbits" : null,
"slot" : 6
}
},
"vdc_id" : 14
}
}
}
}
7.8.3 edge-get()¶
Используя edge-get(), можно получить объект Edge.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-get",
"id": "d085aa7a-df65-11ed-93fc-92e3d554e1c8",
"params": {
"edge_id": "5d220190-debc-11ed-a74c-6112f8825f81"
}
}
Ответ:
{
"id" : "d085aa7a-df65-11ed-93fc-92e3d554e1c8",
"jsonrpc" : "2.0",
"result" : {
"code" : 1,
"data" : {
"deploy_ts" : 1681913724,
"edge_id" : "5d220190-debc-11ed-a74c-6112f8825f81",
"modified" : 1681913612,
"oper_progress" : 100,
"oper_status" : 3,
"oper_ts" : 1681913614,
"owner" : 1,
"ports" : {
"1" : {
"address" : "10.78.28.29",
"ifname" : 21740,
"ip_guard" : 1,
"mac" : "ca:07:fd:95:87:99",
"network_id" : "1",
"port_id" : 21740,
"ratelimit_mbits" : null,
"slot" : 1
},
"812" : {
"address" : "10.200.200.2",
"ifname" : 21741,
"ip_guard" : 0,
"mac" : "ca:07:4e:85:9d:80",
"network_id" : "812",
"port_id" : 21741,
"ratelimit_mbits" : null,
"slot" : 2
}
},
"vdc_id" : 14
}
}
}
Ответ по умолчанию является словарем с ключом по идентификатору сети, что может быть неудобно для маршрутизатора с несколькими портами из одной сети. Для такого случая предусмотрен альтернативный вариант ответа со словарем по идентификатору порта.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-get",
"id": "0b7800e2-df66-11ed-bf83-06e6d554e1c8",
"params": {
"edge_id": "5d220190-debc-11ed-a74c-6112f8825f81",
"port_based": 1
}
}
Ответ:
{
"id" : "0b7800e2-df66-11ed-bf83-06e6d554e1c8",
"jsonrpc" : "2.0",
"result" : {
"code" : 1,
"data" : {
"deploy_ts" : 1681913724,
"edge_id" : "5d220190-debc-11ed-a74c-6112f8825f81",
"modified" : 1681913612,
"oper_progress" : 100,
"oper_status" : 3,
"oper_ts" : 1681913614,
"owner" : 1,
"ports" : {
"21740" : {
"address" : "10.78.28.29",
"ifname" : 21740,
"ip_guard" : 1,
"mac" : "ca:07:fd:95:87:99",
"network_id" : 1,
"port_id" : 21740,
"ratelimit_mbits" : null,
"slot" : 1
},
"21741" : {
"address" : "10.200.200.2",
"ifname" : 21741,
"ip_guard" : 0,
"mac" : "ca:07:4e:85:9d:80",
"network_id" : 812,
"port_id" : 21741,
"ratelimit_mbits" : null,
"slot" : 2
}
},
"vdc_id" : 14
}
}
}
7.8.4 edge-start(), edge-stop(), edge-restart()¶
Данные методы позволяют соответственно запустить, остановить и перезагрузить маршрутизатор.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-restart",
"id": "ab8f4798-4f88-11ed-894d-5663b0b91e77",
"params": {
"edge_id": "19b598bc-3a62-11ed-908c-9669add6c48b"
}
}
Ответ:
{
"jsonrpc": "2.0",
"id": "ab8f4798-4f88-11ed-894d-5663b0b91e77",
"result": {
"code": "1",
"data": {}
}
}
7.8.5 edge-ratelimit()¶
С помощью этого метода можно установить ограничения производительности на порт маршрутизатора.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-ratelimit",
"id": "07b22b3c-4088-11ec-b6cd-ffa47ed49235",
"params": {
"edge_id": "bd16d296-4071-11ec-ac9b-b05f7b1fefc2",
"port_id": 1333,
"ratelimit_mbits": 512
}
}
Ответ:
{
"id" : "07b22b3c-4088-11ec-b6cd-ffa47ed49235",
"jsonrpc" : "2.0",
"result" : {
"code" : "1",
"data" : {}
}
}
7.8.6 edge-add-nat-rule()¶
edge-add-nat-rule() позволяет добавлять правила трансляции программно-определяемого маршрутизатора.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-add-nat-rule",
"id": "97bef0ea-3ae6-11ec-aeb7-679a7ed49235",
"params": {
"edge_id": "d57aede6-3ae4-11ec-b428-a6817c1fefc2",
"rule_number": 500,
"rule_action": 1,
"rule_ifname": 1329,
"rule_proto": 3,
"rule_from_host": "192.168.0.0/16",
"rule_dst_host": "0.0.0.0/0",
"rule_dst_port": 0,
"rule_nat_host": "10.78.27.27",
"rule_nat_port": 0
}
}
Ответ:
7.8.7 edge-add-fw-rule()¶
Используя edge-add-fw-rule(), можно добавить правила firewall.
Для действия block доступен переключатель rule_log, значение которого может быть равно 0 или 1, соответствующие логическим значениям Да и Нет. Этот переключатель управляет логированием пакетов, попадающих под данное правило. Для других действий переключатель игнорируется.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-add-fw-rule",
"id": "a688623a-3ae8-11ec-b35d-dfea7ed49235",
"params": {
"edge_id": "d57aede6-3ae4-11ec-b428-a6817c1fefc2",
"rule_number": 900,
"rule_action": 1,
"rule_log": 1,
"rule_direction": 1,
"rule_ifname": 1329,
"rule_proto": 3,
"rule_from_host": "10.20.30.0/24",
"rule_from_port": 0,
"rule_dst_host": "0.0.0.0/24",
"rule_dst_port": 0
}
}
Ответ:
7.8.8 edge-list-rules()¶
С помощью данного метода можно получить список правил маршрутизатора.
Запрос:
{
"jsonrpc": "2.0",
"id": "1d6bbfd2-3ae9-11ec-82c8-6c117fd49235",
"method": "edge-list-rules",
"params": {
"edge_id": "d57aede6-3ae4-11ec-b428-a6817c1fefc2"
}
}
Ответ:
{
"id" : "1d6bbfd2-3ae9-11ec-82c8-6c117fd49235",
"jsonrpc" : "2.0",
"result" : {
"code" : 1,
"data" : {
"fw" : {
"900" : {
"rule_action" : 1,
"rule_log" : 1,
"rule_direction" : 1,
"rule_dst_host" : "0.0.0.0/24",
"rule_dst_port" : 0,
"rule_from_host" : "10.20.30.0/24",
"rule_from_port" : 0,
"rule_ifname" : 1329,
"rule_proto" : 3
}
},
"incarnation" : 16357515057,
"nat" : {
"500" : {
"rule_action" : 1,
"rule_dst_host" : "0.0.0.0/0",
"rule_dst_port" : 0,
"rule_from_host" : "192.168.0.0/16",
"rule_ifname" : 1329,
"rule_nat_host" : "10.78.27.27",
"rule_nat_port" : 0,
"rule_proto" : 3
}
}
}
}
}
7.8.9 edge-deploy-rules()¶
Метод edge-deploy-rules() позволяет применять правила маршрутизатора.
Запрос:
{
"jsonrpc": "2.0",
"id": "8fcd6f8e-3aea-11ec-ac54-0f047fd49235",
"method": "edge-deploy-rules",
"params": {
"edge_id": "d57aede6-3ae4-11ec-b428-a6817c1fefc2"
}
}
Ответ:
{
"id" : "8fcd6f8e-3aea-11ec-ac54-0f047fd49235",
"jsonrpc" : "2.0",
"result" : {
"code" : 1,
"data" : {
"message" : "Deploy rules done"
}
}
}
7.8.10 edge-remove-nat-rule()¶
С помощью этого метода можно удалять правила NAT.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-remove-nat-rule",
"id": "025d70a4-3a45-11ec-b245-5ef27fd49235",
"params": {
"edge_id": "d57aede6-3ae4-11ec-b428-a6817c1fefc2",
"rule_number": 200
}
}
Ответ:
7.8.11 edge-remove-fw-rule()¶
Данный метод позволяет удалять правила firewall маршрутизатора.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-remove-fw-rule",
"id": "6cd10b58-3a45-11ec-b1ce-108e7ed49235",
"params": {
"edge_id": "d57aede6-3ae4-11ec-b428-a6817c1fefc2",
"rule_number": 300
}
}
Ответ:
7.8.12 edge-add-nic()¶
Данный метод позволяет добавить сетевой интерфейс в маршрутизатор. Выполнение этой операции возможно только на остановленном маршрутизаторе.
Запрос:
{
"jsonrpc": "2.0",
"id": "a0e655d0-5392-11ed-a71a-8655afb91e77",
"method": "edge-add-nic",
"params": {
"edge_id": "19b598bc-3a62-11ed-908c-9669add6c48b",
"network_id": 213,
"slot": 4
}
}
Ответ:
{
"id": "b3f31244-5392-11ed-a58c-9f0faed6c48b",
"jsonrpc": "2.0",
"result": {
"code": 1,
"data": {
"address": "10.20.30.1",
"mac": "ca:09:7a:5c:e1:19",
"network_id": 213,
"port_id": 2072,
"slot": 4
}
}
}
7.8.13 edge-remove-nic()¶
Используя edge-remove-nic(), можно удалить сетевой интерфейс в маршрутизаторе. Выполнение данной операции также возможно только на остановленном маршрутизаторе.
Запрос:
{
"jsonrpc": "2.0",
"id": "6535498c-5393-11ed-a04b-ba38afb91e77",
"method": "edge-remove-nic",
"params": {
"edge_id": "19b598bc-3a62-11ed-908c-9669add6c48b",
"port_id": 2072
}
}
Ответ:
{
"id": "7f4734ac-5393-11ed-a58c-9f0faed6c48b",
"jsonrpc": "2.0",
"result": {
"code": 1,
"data": null
}
}
7.8.14 edge-remove()¶
Данный метод позволяет удалить программно-определяемый маршрутизатор.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-remove",
"id": "737d2366-3a3a-11ec-8f2f-83fc7ed49235",
"params": {
"edge_id": "d57aede6-3ae4-11ec-b428-a6817c1fefc2"
}
}
Ответ:
7.8.15 edge-get-pfloggs()¶
Используя метод edge-get-pfloggs(), можно получить информацию о пакетах, блокированных правилами с флагом log в формате pcap. В поле result->data->message находится pcap-файл в формате base64. В случае отсутствия пакетов, попадающих под критерий выбора, поле message содержит пустую строку.
Параметр limit определяет максимальное количество пакетов, которое должен содержать ответ.
Параметры ts_start и ts_finish содержат временные отметки соответственно начала и окончания периода в формате unix-time.
Запрос:
{
"jsonrpc": "2.0",
"method": "edge-get-pfloggs",
"id": "b277fcde-0a87-11ee-935f-ffddd554e1c8",
"params": {
"edge_id": "1a9ce152-09ad-11ee-a8fd-45511cb03f24",
"limit": 1000,
"ts_start": 0,
"ts_finish": 0
}
}
Ответ: