Ubuntu netplan で VLAN ソースルーティングを設定する

ネットワーク計測のために 複数 VLAN ソースルーティングを設定した

弊宅では複数の回線を契約している都合ですべての回線を Core Switch に VLAN を付番し収容している。こうすることで 802.1Q で仮想マシンクラスターや Ubuntu などのサーバーから Trunk で渡すと回線を変更しながら使うことができる。正直超便利なので2回線以上ある家庭にはおすすめする。

先日から複数回 Rakuten Mobile が急に通常の遅延から 300ms 程度になる事象がているため各回線の品質を監視することにした。 昔なら SmokePing を利用する所だが弊宅は管理コストを抑えたいしすでに Zabbix がいて LAN 内外から監視しているため Zabbix とすることにした。また計測には network_exporter などを使う想定で Listen アドレスから送出されるパケットは該当 IP の GW に送信されるようにソースルーティングを試す。

設定

11-config.yaml
 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
network:
    version: 2
    ethernets:
        eth0:
            addresses:
            - 10.2.21.156/24
            match:
                macaddress: 36:50:92:00:00:00
            nameservers:
                addresses:
                - 10.2.21.1
                search:
                - mgmt.tyo1.home.exsample.com
            routes:
                - to: default
                  via: 10.2.21.1
            set-name: eth0
        ens19:
            match:
                macaddress: e2:b2:4f:00:00:00
            set-name: ens19

    vlans:
      v211:
        id: 211
        link: ens19
        dhcp4: false
        addresses:
        - 192.168.11.150/24
        routes:
          - to: default
            via: 192.168.11.1
            metric: 111
            table: 211
        routing-policy:
          - from: 192.168.11.0/24
            table: 211
      v212:
        id: 212
        link: ens19
        dhcp4: false
        addresses:
        - 10.2.12.150/24
        routes:
          - to: default
            via: 10.2.12.1
            metric: 200
            table: 212
        routing-policy:
          - from: 10.2.12.0/24
            table: 212
      v213:
        id: 213
        link: ens19
        dhcp4: false
        addresses:
        - 192.168.13.150/24
        routes:
          - to: default
            via: 192.168.13.1
            metric: 113
            table: 213
        routing-policy:
          - from: 192.168.13.0/24
            table: 213

確認

  • eth0 は life ネットワークとなっていて今はルーティングを触ってないので v211 と同じ経路になる
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
root@tmp-netplan:/etc/netplan# traceroute -I -i eth0 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  10.2.21.2 (10.2.21.2)  0.327 ms  0.400 ms  0.491 ms
 2  web.setting (192.168.11.1)  2.218 ms  2.198 ms  2.195 ms
 3  * * *

root@tmp-netplan:/etc/netplan# traceroute -I -i v211 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  web.setting (192.168.11.1)  2.507 ms  2.666 ms  2.868 ms
 2  * * *

root@tmp-netplan:/etc/netplan# traceroute -I -i v212 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  FS030W.lan (10.2.12.1)  2.787 ms  2.768 ms  2.762 ms
 2  * * *

root@tmp-netplan:/etc/netplan# traceroute -I -i v213 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  web.setting (192.168.13.1)  1.549 ms  1.565 ms  1.606 ms
 2  * * *

network_exporter

大丈夫そうなので network_exporter を試してみる

ソースIP の設定は source_ip を追加することで可能です

network_exporter.yml
 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
# sdsdsd
conf:
  refresh: 15m
  # nameserver: 8.8.8.8:53 # Optional
  nameserver_timeout: 250ms # Optional

icmp:
  interval: 5s
  timeout: 3s
  count: 6

mtr:
  interval: 60s
  timeout: 500ms
  max-hops: 30
  count: 6

tcp:
  interval: 5s
  timeout: 3s

http_get:
  interval: 15m
  timeout: 5s

targets:
  - name: google-dns1-v211
    host: 8.8.8.8
    type: ICMP+MTR
    source_ip: 192.168.11.20
  - name: google-dns1-v212
    host: 8.8.8.8
    type: ICMP+MTR
    source_ip: 10.2.12.85
  - name: google-dns1-v213
    host: 8.8.8.8
    type: ICMP+MTR
    source_ip: 192.168.13.20

1
2
3
4
5
wget https://github.com/syepes/network_exporter/releases/download/1.7.3/network_exporter_1.7.3.Linux_x86_64.tar.gz
tar xvf network_exporter_1.7.3.Linux_x86_64.tar.gz
sudo setcap 'cap_net_raw,cap_net_admin+eip' network_exporter

./network_exporter --config.file=network_exporter.yml

これで localhost:9427/metrics で待っていると情報が確認できるようになるはず。

参考情報

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