例として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については別に書きます。



All Articles