例としてHetznerを使用したKVMでのIPv4およびIPv6のルーティング



この記事では、 KetaベースのHetzner (他のHVMやXenにも適している可能性があります)で使用されているものと同様のネットワーク構成でのIPv4およびIPv6の適切な構成に焦点を当てています。

ホストとほとんどの仮想マシンにUbuntuがあるため、インターフェイス構成の例はifupに基づいています。 IPv4ガイドは、Hetzner Wikiの記事に基づいていますが、私は主にIPv6の問題をGoogleで調べています。


開始条件



このホストから、すぐに1つのIPv4アドレスを取得します。 それに加えて、最大3つのIPv4アドレスとサブネットブロックを要求/購入できます。 この例では、次の構成が考慮されます。

ホストIP: 123.45.12.48
ゲートウェイ: 123.45.12.1
追加IP: 123.45.53.11、123.45.53.12、123.45.53.13
追加のサブネット: 123.45.90.112/29

Hetznerは、すべてのパケットを最初の(通常のみ)eth0インターフェイスのMACアドレスに送信し、すべての発信パケットが同じMACアドレスを離れることを期待します。 サポートを通じて、追加の「ピース」 IPアドレスに他のMACアドレスを設定するように依頼できます。これにより、KVM-ok vnet *インターフェースをeth0を持つ1つのブリッジにドロップできますが、この構成は考慮しません。

したがって、最終構成で必要なものは次のとおりです。


ネットワークを構成するには、bridge-utils、dhcp3-server、iptables、iproute2のパッケージが必要です。

メインホストインターフェイスを構成する


/ etc / network / interfacesで、eth0を次のように定義する必要があります。
auto eth0
iface eth0 inet static
address 123.45.12.48
netmask 255.255.255.255
gateway 123.45.12.1
pointopoint 123.45.12.1

マスク255.255.255.255は、pointopoint ifupオプションを介してゲートウェイが技術的に同じインターフェース上にあることを決定することにより、すべての発信パケットがゲートウェイに送られることを意味します(もちろん、制限されたマスクのために到達しません)。 これは、次のルーティングルールと同等です。
123.45.12.1 dev eth0 proto kernel scope link src 123.45.12.48
default via 123.45.12.1 dev eth0 metric 100


VM用のブリッジの構成



タスクはVM間のトラフィックを制限することであるため、VMを1つのブリッジに押し込むことはできません。 追加の各IPアドレスおよび/ 29サブネットからの アドレスに対して、個別のブリッジを記述する必要があります。
auto br 112
br 112 iface inet static
address 172.30. 112 .1
netmask 255.255.255.0
pre-up brctl addbr br 112
post-up route add -host 123.45.90.112 br112
post-down brctl delbr br 112

各ブリッジはbr <xxx>と呼ばれます。xxxはIPv4アドレスの最後のバイトです。 プライベートIPv4アドレスは172.30.xx.0 / 24(以下で説明)から生成されます;そこには、brctlがインターフェイスの説明にアタッチされ(プレアップでブリッジを作成、ポストダウンで破棄)、ルーティングが構成されます(パブリックIPアドレスはこのブリッジで定義されます)。

br 11 、br 12 、br 13 、およびbr 113 -br 119は、まったく同じです。

DHCPを構成する



一部のOSのインストール中にポイントポイントの構成は難しいため、DHCPサーバーはVMの各ブリッジで動作し、インストールを完了するのに十分な基本IPv4構成を提供します。

/etc/dhcp3/dhcpd.confのdhcp3構成を次のように変更します。
authoritative;
default-lease-time 3600;
max-lease-time 3600;
ddns-update-style ad-hoc;
log-facility local7;
use-host-decl-names on;

option subnet-mask 255.255.255.0;
option domain-name "lan";
option domain-name-servers xx.yy.100.100, xx.yy.99.99, xx.yy.98.98; <-- DNS–

subnet 172.30.11.0 netmask 255.255.255.0 {
option routers 172.30.11.1;
range 172.30.11.10 172.30.11.200;
}

subnet 172.30.12.0 netmask 255.255.255.0 {
option routers 172.30.12.1;
range 172.30.12.10 172.30.12.200;
}

subnet 172.30.13.0 netmask 255.255.255.0 {
option routers 172.30.13.1;
range 172.30.13.10 172.30.13.200;
}

subnet 172.30.112.0 netmask 255.255.255.0 {
option routers 172.30.112.1;
range 172.30.112.10 172.30.112.200;
}

...

subnet 172.30.119.0 netmask 255.255.255.0 {
option routers 172.30.119.1;
range 172.30.119.10 172.30.119.200;
}


また、dhcp3が機能するインターフェイスについても説明します。ファイル/ etc / default / dhcp3-serverでINTERFACESを変更します。
INTERFACES="br11 br12 br13 br112 br113 br114 br115 br116 br117 br118 br119"

次に、dhcp3を再起動します。
/etc/init.d/dhcp3-server restart

iptablesのセットアップ



#!/bin/sh
it="/sbin/iptables"

MY_NET=" 123.45.90.112/29 123.45.53.11/32 123.45.53.12/32 123.45.53.13/32 "
MY_NET_DHCP="172.30.0.0/16"
HOST_IP=" 123.45.12.48 "
MAIN_IF="eth0"

# INPUT
$it -F INPUT

$it -A INPUT -p udp --dport 67 -i br+ -j ACCEPT
# INPUT
#$it -A INPUT -j DROP

# FORWARD
$it -F FORWARD

$it -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

for NET in $MY_NET; do
$it -A FORWARD -i br+ -o $MAIN_IF -s $NET -j ACCEPT # VM[fixed_ip] --> net
done

for NET in $MY_NET_DHCP; do
$it -A FORWARD -i br+ -o $MAIN_IF -s $NET -j ACCEPT # VM[dhcp] --> net
done

for SOURCE_NET in $MY_NET $MY_NET_DHCP; do
for DEST_NET in $MY_NET; do
$it -A FORWARD -i br+ -o br+ -s $SOURCE_NET -d $DEST_NET -j ACCEPT # VM <--> VM
done
done

for NET in $MY_NET; do
$it -A FORWARD -i $MAIN_IF -o br+ -d $NET -j ACCEPT # net --> VM
done
$it -A FORWARD -i $MAIN_IF -o gbr1 -d $MY_NET_PVT -j ACCEPT # net --> PVT

$it -P FORWARD DROP

# POSTROUTING
$it -t nat -F POSTROUTING
for NET in $MY_NET_DHCP; do
$it -t nat -A POSTROUTING -o $MAIN_IF -s $NET -j SNAT --to-source $HOST_IP # nat the dhcp
# NAT IP- DHCP
done

echo 1 > / proc/sys/net/ipv4/ip_forward


VMセットアップ



さて、最後のステップはVMを直接構成することです。 libvirt / KVMの場合、ブリッジを介したネットワークについて説明します。
<interface type='bridge'>
<source bridge='brXX'/>
<model type='virtio'/>
</interface>


同時に、最初のブート時に、仮想マシンはDHCPからプライベートアドレスを受け取ります。インストール後、パブリックIPを修正する必要があります。
auto eth0
iface eth0 inet static
address 123.45.90.116
netmask 255.255.255.255
gateway 123.45.12.48
pointopoint 123.45.12.48


この記事のボリュームは十分に大きかったので、IPv6については別に書きます。

Source: https://habr.com/ru/post/J104298/


All Articles