【2025年02月版】Proxmox8.3 で SDN - Simple Zone の作成メモ

# はじめに

Proxmox の SDN を利用して、Simple Zone を構築するメモ
VMWareなどでnat環境を構築するのと一緒

# Simple Zone の作成

以下の構成で作成する
```plantuml
@startuml
cloud internet
rectangle "home network\n192.168.0.0/24" as homenetwork {
rectangle "router\n192.168.0.254" as router
rectangle "proxmox\n192.168.0.10" as proxmox {
  rectangle "Simple Zone\n10.15.20.0/24" as simplezone {
    rectangle "gateway\n10.15.20.1" as gateway {
      rectangle "snat" as snat
    }
    rectangle "VM\n10.15.20.100" as vm100
  }
}
internet -- router
router -- snat
snat - vm100
}
@enduml
```

## インストール

``` terminal
# apt install dnsmasq -y
# systemctl disable --now dnsmasq
# apt install frr-pythontools -y
```

## Zone/VNet/Subnet の作成

Datacenter → SDN → Zones → Add

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/a2b21132-183d-c0ae-fb95-e8485e8961a9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/1a03da2e-dbd7-a3d5-e5f4-2fcc60ed022f.png)

Datacenter → SDN → VNets → VNets → Create

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/f1fb9749-37e1-adb0-4585-ecd8bc0f519b.png)

Datacenter → SDN → VNets → Subnets → Create

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/81ef11c0-adc9-658a-a65f-d789bf56f936.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/7bfd6a89-691e-867b-3169-44bc0901aff5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/df5e56ab-77e0-eced-ab21-3456e9acc9cc.png)

Datacenter → SDN → Status → Apply

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/9be422b8-dd10-2c30-3401-4474b32ebb5a.png)

avaliable になるのを待つ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/55e07e51-a0bc-a46c-54e6-997b002fbdea.png)

Taskにエラーがでていなければ作成完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/a6d42a2a-b958-4c13-014d-47fa7095dad8.png)

## Firewall設定

### DHCPFwd ルールの追加

Datacenter → Firewall → Add

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/9762577a-cdeb-97df-1b6e-b007fd746d81.png)

### DNS ルールの追加

Datacenter → Firewall → Add

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/2d26c054-6684-c06d-e646-1db2a7a3dbdf.png)

### 確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/6a9b2049-9889-58e6-3db2-9116fe741fbc.png)

## VMからの利用

DHCPにすることでIPなどを取得できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/fe4792e1-3cbe-5779-ba34-641a5a338027.png)

## IPAMからの確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/beab67f4-2305-d04f-b4f4-04acdfa58340.png)

# その他

:::note warn
Proxmox上で、Linux Bridge を利用せずに、Open vSwitch を利用してネットワークを構築している場合は、上記の手順だけではうまくいかない。

IPAM上ではDHCPからIPが割り振られているように見えるが、VMからは見えない。
MACアドレスなども一致するので、VMにDHCPのレスポンスが届いていないように見える。
クラスタのfirewall設定でも、udp:67 を Direction: in、Action: ACCEPT で許可する必要がある。

また、外部と通信するためには、proxmox側で、カーネルパラメータ `net.ipv4.ip_forward=1` にした上で、クラスタのfirewallでつような通信をACCEPTに設定する必要がある。

```terminal
root@pve:~# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/455f3928-88ad-ec86-59c4-64077d3c7b39.png)

よくわからない状況になったら、落ち着いて、VMが動作しているProxmo上で、`iptables -t nat -S`や、`sysctl -a | grep ip_forward` 、tcpdumpでどこまで届いているのか、などを順番に確認すると良い。
:::

# リンク

- [Proxmox - Setup Simple Zone With SNAT and DHCP](https://pve.proxmox.com/wiki/Setup_Simple_Zone_With_SNAT_and_DHCP)
- [reddit - VMs on SDN with dhcp are not being assigned IPs](https://www.reddit.com/r/Proxmox/comments/1fjtoyy/vms_on_sdn_with_dhcp_are_not_being_assigned_ips/)
- [Proxmox VE 8.1で標準搭載になったSDNを試す〜EVPNゾーンを使って仮想マシン間で通信させてみた](https://internet.watch.impress.co.jp/docs/column/shimizu/1585271.html)

# さいごに

かんたんでしたね