インターネットもどき

ひととおりできたので、再構築するときのために作業メモ。おかしいところとか、足りない情報とか見つけたらつっこんでやってください。

ML115上のVMWare ESXiとOpenBSDをつかってインターネットのような何かをつくってみた。

全体的な構成

図にしてみるとこんな感じ。いまいちOmniGraffleが使いこなせない。

AS65001とAS65002のふたつのネットワークをIXにあたるdom0 switch経由で接続。AS65001側にルートDNSサーバ。AS間の経路交換はBGPで。それぞれのAS内にメールサーバを用意してメール送受信ができる。管理用に各仮想マシンに物理アダプタにアサインした仮想スイッチに接続するためのNICをつくっておく。ほかは、VMWare内部で完結させる。とりあえずIPv4 Only。

VMWareの設定

管理用に物理アダプタをアサインしてある仮想スイッチをひとつ(図の「management switch」と書いてあるところ)と、物理アダプタをアサインしない仮想スイッチを3つ(図の「dom0 switch」「dom1 switch」「dom2 switch」)をそれぞれ追加。

仮想マシンの設定

仮想マシンはすべてOpenBSD 4.6/amd64を使用。vmt0が使えるi386版のほうがよかったのかもしれない。仮想マシンでVMCIを有効化しておいてみた。これは意味があるか不明。


仮想マシンの説明と設定はつぎのとおり。

routeserver.dom1

このネットワークでのルートDNSサーバ。
設定したところ
DNSサーバまわりは、以前Debianで作ったときとほぼ同じ。

/var/named/etc/named.conf

書きかえたところだけ。

zone "." {
        type master;
        file "master/root.db";
};
/var/named/master/root.db
$TTL 1d
.       IN      SOA     rootserver.dom1.        hostmaster.rootserver.dom1. (
        3       ; serial
        3h      ; Reflesh
        1h      ; Retry
        1w      ; Expire
        1h )    ; Negative Cache TTL
                        IN      NS      rootserver.dom1.

rootserver.dom1.        IN      A       10.0.0.1
dom1.                   IN      NS      dns1.dom1.
dns1.dom1.              IN      A       10.0.0.11
0.0.10.in-addr.arpa.    IN      NS      dns1.dom1.

dom2.                   IN      NS      dns1.dom2.
dns1.dom2.              IN      A       10.2.0.1
0.2.10.in-addr.arpa.    IN      NS      dns1.dom2.
<||

***/etc/rc.conf.local
>||
named_flags=""          # for normal use: ""
/etc/mygate
10.0.0.254

dns1.dom1

dom1ドメインDNSコンテンツサーバ。

/var/named/etc/named.conf

これも書きかえたところだけ。

zone "dom1." {
        type master;
        file "master/db.dom1";
};

zone "0.0.10.in-addr.arpa." {
        type master;
        file "master/db.10.0.0";
};
/var/named/etc/root.hint

root.hintは、すべてのDNSサーバで共通のものを使う。

.                        9999999  IN  NS    rootserver.dom1.
rootserver.dom1.         9999999      A     10.0.0.1
/var/named/master/db.dom1
$TTL 1d
dom1.   IN      SOA     dns1.dom1.      hostmaster.dns1.dom1. (
        2       ; Serial
        3h      ; Reflesh
        1h      ; Retry
        1w      ; Expire
        1h )    ; Negative Cache TTL
dom1.   IN      NS      dns1.dom1.
dom1.   IN      MX      10      mx1.dom1.

rootserver.dom1.        IN      A       10.0.0.1
dns1.dom1.              IN      A       10.0.0.11
mx1.dom1.               IN      A       10.0.0.101
/var/named/master/db.10.0.0
$TTL 1d
0.0.10.in-addr.arpa.    IN      SOA     dns1.dom1.      hostmaster.dns1.dom1. (
        2       ; Serial
        3h      ; Reflesh
        1h      ; Retry
        1w      ; Expire
        1h )    ; Negative Cache TTL
0.0.10.in-addr.arpa.            IN      NS      dns1.dom1.

1.0.0.10.in-addr.arpa.          IN      PTR     rootserver.dom1.
11.0.0.10.in-addr.arpa.         IN      PTR     dns1.dom1.
101.0.0.10.in-addr.arpa.        IN      PTR     mx1.dom1.
/etc/rc.conf.local
named_flags=""          # for normal use: ""
/etc/mygate
10.0.0.254

dns1.dom2

dom2ドメインDNSコンテンツサーバ。

/var/named/etc/named.conf
zone "dom2." {
        type master;
        file "master/db.dom2";
};

zone "0.2.10.in-addr.arpa." {
        type master;
        file "master/db.10.2.0";
};
/var/named/master/db.dom2
$TTL 1d
dom2.   IN      SOA     dns1.dom2.      hostmaster.dns1.dom2. (
        2       ; Serial
        3h      ; Reflesh
        1h      ; Retry
        1w      ; Expire
        1h )    ; Negative Cache TTL
dom2.   IN      NS      dns1.dom2.
dom2.   IN      MX      10      mx1.dom2.

dns1.dom2.      IN      A       10.2.0.1
mx1.dom2.       IN      A       10.2.0.101
/var/named/master/db.10.2.0
$TTL 1d
0.2.10.in-addr.arpa.    IN      SOA     dns1.dom2.      hostmaster.dns1.dom2. (
        2       ; Serial
        3h      ; Reflesh
        1h      ; Retry
        1w      ; Exprire
        1h )    ; Negative Cache TTL
0.2.10.in-addr.arpa.            IN      NS      dns1.dom2.

1.0.2.10.in-addr.arpa.          IN      PTR     dns1.dom2.
101.0.2.10.in-addr.arpa.        IN      PTR     mx1.dom2.
/etc/rc.conf.local
named_flags=""          # for normal use: ""
/etc/mygate
10.2.0.254

dnscache.dom2

ここのネットワークでのDNSキャッシュサーバ。ASごとに作ってもいいけど、面倒なのでdom2だけに作って全体で共用。

/var/named/etc/named.conf
acl clients {
        localnets;
        ::1;
        10.0.0.0/8;
};

これはひどい。ほぼオープンリゾルバ。

/etc/rc.conf.local
named_flags=""          # for normal use: ""
/etc/mygate
10.2.0.254

router1.dom1

AS65001のためのIX接続用ルータ。OpenBGPDを使う。

/etc/bgpd.conf
#macros
peer2="172.16.0.2"

# global configuration
AS 65001
router-id 172.16.0.1
holdtime 90
holdtime min 3
# listen on 127.0.0.1
# listen on ::1
# fib-update no
# route-collector no
log updates
network 10.0.0.0/24

# neighbors and peers
group "peering AS65002" {
        remote-as 65002
        neighbor $peer2 {
                descr   "AS 65001 peer 1"
                announce self
                tcp md5sig password hoge0123456789
        }
}

# filter out prefixes longer than 24 or shorter than 8 bits
deny from any
allow from any inet prefixlen 8 - 24

# do not accept a default route
deny from any prefix 0.0.0.0/0

# filter bogus networks
#deny from any prefix 10.0.0.0/8 prefixlen >= 8
deny from any prefix 172.16.0.0/12 prefixlen >= 12
deny from any prefix 192.168.0.0/16 prefixlen >= 16
deny from any prefix 169.254.0.0/16 prefixlen >= 16
deny from any prefix 192.0.2.0/24 prefixlen >= 24
deny from any prefix 224.0.0.0/4 prefixlen >= 4
deny from any prefix 240.0.0.0/4 prefixlen >= 4
/etc/rc.conf.local
bgpd_flags=""           # for normal use: ""
11/22追記 /etc/sysctl.conf
net.inet.ip.forwarding=1

router1.dom2

AS65002のためのIX接続用ルータ。こちらもOpenBGPD。

/etc/bgpd.conf
#macros
peer1="172.16.0.1"

# global configuration
AS 65002
router-id 172.16.0.2
holdtime 90
holdtime min 3
# listen on 127.0.0.1
# listen on ::1
# fib-update no
# route-collector no
log updates
network 10.2.0.0/24

# neighbors and peers
group "peering AS65001" {
        remote-as 65001
        neighbor $peer1 {
                descr   "AS 65001 peer 1"
                announce self
                tcp md5sig password hoge0123456789
        }
}

# filter out prefixes longer than 24 or shorter than 8 bits
deny from any
allow from any inet prefixlen 8 - 24

# do not accept a default route
deny from any prefix 0.0.0.0/0

# filter bogus networks
#deny from any prefix 10.0.0.0/8 prefixlen >= 8
deny from any prefix 172.16.0.0/12 prefixlen >= 12
deny from any prefix 192.168.0.0/16 prefixlen >= 16
deny from any prefix 169.254.0.0/16 prefixlen >= 16
deny from any prefix 192.0.2.0/24 prefixlen >= 24
deny from any prefix 224.0.0.0/4 prefixlen >= 4
deny from any prefix 240.0.0.0/4 prefixlen >= 4
/etc/rc.conf.local
bgpd_flags=""           # for normal use: ""
11/22追記 /etc/sysctl.conf
net.inet.ip.forwarding=1

mx1.dom1・mx1.dom2

dom1・dom2ドメインのMXレコードに設定されているメールサーバ。どっちも設定はほとんど同じなのでmx1.dom1のみ。

sendmail.mc
$ cd /usr/share/sendmail/cf
$ sudo cp openbsd-proto.mc sendmail.mc

とやってから、sendmail.mcを編集。下記をしかるべきところに追加。

MASQUERADE_AS(`dom1')dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`accept_unqualified_senders')dnl

下2行以外は、もともとコメントアウトされてる行があるので、行頭のdnlを消すだけ。MASQUARADE_ASはドメインごとに書きかえ。書きかえたら、

$ sudo make sendmail.cf
$ sudo cp sendmail.cf /etc/mail/
/etc/mail/local-host-names

mx1.dom1の場合。

dom1
/etc/rc.conf.local
sendmail_flags="-L sm-mta -C/etc/mail/sendmail.cf -bd -q30m"
/etc/resolv.conf
lookup file bind
nameserver 10.2.0.253

Todo

  • とりあえずIPv4 OnlyでつくったのでIPv6 Readyにする。