スキップしてメイン コンテンツに移動

投稿

6月, 2020の投稿を表示しています

DHCPv6-PDで固定のprefixとaddressを割り当てる

親ルータから子ルータ、子ルータから孫ルータへ等とPrefix Delegationをおこなっていて気が付いたのは、Prefixが動的に割り当てられるため、上位のルータのPREFIXが変更されると下位のルータが通信できなくなる点でした。つまり、Prefix Delegationはするが固定で割り当てる必要があるといまさらながら気が付きました。そこで調べたところ、ホスト固定でprefixを付与する方法があるようなので、本稿をUPしてみました。 まず、最初にしらべないといけないのは、クライアント(下位ルータ)のDUIDです。上位のルータの/var/log/syslogに以下のようなログがあるのでそれを利用します。 dhcpd[1954]: Reply NA: address 2XXX:aaaa:bbbb:cc00:1111:2222:3333:4444 to client with duid 00:0X:00:0X:XX:YY:ZZ:AA:00:BB:CC:DD:EE:FF iaid = ZZZZZZZZZZ valid for 600 seconds 後はdhcpd6.confに以下の様に追加設定すれば、固定でPREFIXとアドレスを割り当てることができます。 host gw2 { host-identifier option dhcp6.client-id 00:0X:00:0X:XX:YY:ZZ:AA:00:BB:CC:DD:EE:FF; fixed-address6 2XXX:aaaa:bbbb:cc00::2; fixed-prefix6 2XXX:aaaa:bbbb:cc10::/60; on commit { execute("/usr/local/sbin/pdr.sh", "2XXX:aaaa:bbbb:cc10::", "60", "2XXX:aaaa:bbbb:cc00::2"); } } on commit時に/usr/loca/sbin/pdr.shを固定呼び出しているのは、サブルータへのスタテイックルートを設定するためですが、固定で割当てている場合、dhcp6.ia-pdが存在していて設定をパラメータ渡ししようとしても、no

DHCPv6-PD サブルータの構成 その3: /80の委譲を受けたひ孫ルータの場合

PREFIX /80の委譲を受けたひ孫ルータの設定です。今回も構成は前回と同じです。 それでは早速設定です。今回は、図のgw4です。 ## 0-1a. /etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet static address 172.16.3.2 netmask 255.255.255.0 gateway 172.16.3.1 iface eth0 inet6 dhcp accept_ra 2 request_prefix 1 ## 0-1b. /etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet static address 172.16.4.1 netmask 255.255.255.0 iface eth1 inet6 manual ## 0-2. /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.eth0.accept_ra = 2 ## 0-3. /etc/rc.local (chmod+x) #!/bin/bash ## clear lease records just for sure. rm /var/lib/dhcp/dhclient6.eth0.leases touch /var/lib/dhcp/dhclient6.eth0.leases sysctl -p ifup eth1 sleep 10 /etc/init.d/isc-dhcp-server restart ## 0-4. /etc/radvd.conf (apt-get install radvd) interface eth1 { AdvManagedFlag on; AdvOtherConfigFlag on; AdvSendAdvert on; AdvLinkMTU 1500; MaxRtrAdvInterval 180; RDNSS 2606:4700:4700::1111 2606:4700:4700::1001 { }; A

DHCPv6-PD サブルータの構成 その2: 孫ルータが/64の委譲を受け、ひ孫ルータに/80を委譲する場合

前回の続きです。孫ルータがひ孫ルータに/80を委譲する場合です。/80の委譲なんてできるのか?ということについていえば、/56や/60の委譲と同じく、DHCPv6を使えばできます。あまりとやかく書いても仕方ないので、早速設定に入ります。構成は前回と同じですが、今回は孫ルータのgw3の設定です。 ## 0-1a. /etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet static address 172.16.2.2 netmask 255.255.255.0 gateway 172.16.2.1 iface eth0 inet6 dhcp accept_ra 2 request_prefix 1 ## 0-1b. /etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet static address 172.16.3.1 netmask 255.255.255.0 iface eth1 inet6 manual ## 0-2. /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.eth0.accept_ra = 2 ## 0-3. /etc/rc.local (chmod+x) #!/bin/bash sysctl -p ifup eth1 sleep 10 /etc/init.d/isc-dhcp-server restart ip -4 route add 172.16.4.0/24 via 172.16.3.2 ## 0-4. /etc/radvd.conf (apt-get install radvd) 注:DHCPv6にアドレス管理を任せる場合は、AdvManagedFlagとAdvOtherConfigFlagをonにしてください。 interface eth1 { AdvManagedFlag off; AdvOtherConfigFlag off; AdvSendAdvert on; AdvLinkMTU 1500; MaxRtrAd

DHCPv6-PD サブルータの構成 その1: 子ルータが /60の委譲を受け、孫ルータに/64を委譲する場合

前回 は、ONU直下に/60のPREFIXをサブルータに委譲するMAP-Eルータを構成しましたが、今回はMAP-Eルータ以下に/64のプレフィックスをさらに孫ルータへと委譲する子ルータを構成してみました。 親・子・孫ルータともにPDでき、かつ、サブルータへの経路を設定できる構成は見かけないので、本稿をアップしてみました。通信環境はOCNバーチャルコネクトで、OSはDebianです。 構成図は以下の通りですが、今回は子ルータgw2の設定です。 それでは早速設定していきます。 ## 0-1a. /etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0 gateway 192.168.1.1 iface eth0 inet6 dhcp accept_ra 2 request_prefix 1 ## 0-1b. /etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet static address 172.16.2.1 netmask 255.255.255.0 iface eth1 inet6 manual ## 0-2. /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.eth0.accept_ra = 2 ## 0-3. /etc/rc.local (chmod+x) #!/bin/bash sysctl -p ifup eth1 sleep 10 /etc/init.d/isc-dhcp-server restart ip -4 route add 172.16.3.0/24 via 172.16.2.2 dev eth1 ip -4 route add 172.16.4.0/24 via 172.16.2.2 dev eth1 ## 0-4. /etc/radvd.conf (apt-get install radvd) interface eth1 { Adv

MAP-E: DHCPv6-PDにて取得したPREFIXからbashスクリプトにて各種パラメータを自動計算

前回 、 前々回 は、すでに計算済みのmap-eルールをDebian ルータの起動時に読み込ませていましたが、 javascriptで書かれた計算ページ のjavascriptソースをbashスクリプトに書き換え、各種パラメータを自動計算できるようにしてみました。環境は通信が、OCNバーチャルコネクトで、OSはDebianです。(v6Plusでも自動計算できる範囲であれば対応できると思います。) 追記2:ルータ自体からさらにサブネットルータにPDできるようにしました。 なお、今回の設定は、GUA(IPv4でいうグローバルアドレス)をLAN側に割り当てる設定であり、firewallの設定も入れていませんので、注意してください。 今回の設定は、以下のgw1の部分です。 以下、今回のスクリプトおよびインターフェースの設定等です。 ## 0-1a. WAN側インターフェス auto enp1s0f1 iface enp1s0f1 inet6 auto dhcp 1 request_prefix 1 ## 0-1b. LAN側インターフェス auto enp1s0f0 iface enp1s0f0 inet6 manual iface enp1s0f0 inet static address 192.168.1.1 netmask 255.255.255.0 追記3:forward設定をしている場合、外側インターフェースがaccept_ra=2でないとraにてgatewayが設定されない点を修正しました。 ## 0-2. forward設定(/etc/sysctl.conf) net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 net.ipv6.conf.enp1s0f1.accept_ra=2 追記1:wan interfaceが自動でupされず、dhclientとdhcpdが正常に呼び出されない場合があります。おそらくタイミングの問題だと思いますが、その場合、/etc/rc.localに以下を追記してください。 ## 0-3. /etc/rc.local (chmod +x) ifup enp1s0f1 sleep 10 /etc/init.d/

MAP-Eルータへの外部からのポート指定接続をNATで指定ホスト・ポートに転送(nftables)

nftablesを使って、MAP-Eルータへの外部からのポート指定接続をNATで指定ホスト・ポートに転送してみました。構成は、 前回のiptables版 と同じですが、map-e routerは "clamp your TCP MSS to Path MTU"対応は、Linux kernel 4.14 and nftables 0.9以降 のため、Debian 11/Bullseyeで構成しています。 internet client <-----> router(10.22.22.22:4848|192.168.1.1) <-----> (192.168.1.22:22) ssh server nftablesの設定方法は以下の通りです。 nft add table ip nat ^ nft add chain ip nat prerouting { type nat hook prerouting priority 0 \; } nft add chain ip nat postrouting { type nat hook postrouting priority 0 \; } nft add rule ip nat prerouting ip daddr 10.22.22.22 tcp dport 4848 dnat to 192.168.1.22:22 nft add rule ip nat postrouting ip daddr 192.168.1.22 tcp dport 22 snat to 192.168.1.1 前回 と同じく、dnatで転送先にパケットは届きますが、帰りのパケットをsnatで192.168.1.1にして通信できるようにしています。また前回と同様にmap-eトンネルデバイスにはパブリックIP アドレス(10.22.22.22を読み替えて)を振っておいてください。 なお、Debian 11/Bullseyのiptablesにはiptables-translateコマンドがあり、 iptables-translate -t nat -A PREROUTING -p

フレッツ光クロス:MAP-E ROUTER by Debian Box (nftables)

今回は、nftablesをつかって、map-e接続してみました。構成は 前回 と同じですが、nftablesでの "clamp your TCP MSS to Path MTU"は、Linux kernel 4.14 and nftables 0.9以降 なので、Debianはversion 11(Bullseye: 執筆現在はTestバージョン)を使用しました。 さて、早速設定ですが、大まかな設定の流れと事前の計算は、すでに、 前回 を読んでいて理解してくださっているものと仮定します。なお、今回は こちらを参考 にさせていただきました。ありがとうございます。 追記 2021/03/16:前回と同様に、radvdumpで対向ルータのアドレスがわかります。 前略 # # radvd configuration generated by radvdump 2.18 # based on Router Advertisement from fe80::wwww:xxxx:yyyy:zzzz # received by interface enp1s0f1 # 後略 #!/bin/bash #追記 2023/04/04:CEアドレスとtun0はWANDEVに割り当てる様に再度修正しました。 #追記 2023/03/28:PFXを分割しGWA(gateway address)を追加の上LAN側に割り当てるよう修正しました。 PFX=2400:4050:5c71:af00:: PLEN=56 GWA=1 BR='2001:380:a120::9' CE='2400:4050:5c71:af00:99:f171:c600:2f00' IP4='153.241.113.198' PSID=47 LANDEV='enp1s0' WANDEV='enp2s0' TUNDEV='tun0' # TYPE: [ OCN | V6P ] TYPE='OCN' if [ "$TYPE" = "OCN" ]; then \ lp=63 nxps=1024 # next port set elif

MAP-Eルータへの外部からのポート指定接続をNATで指定ホスト・ポートに転送(iptables)

map-e(ocn バーチャルコネクト)でDebian routerをinnternet接続し、外部からのポート指定した接続を、指定したホスト・ポートにDNATで転送してみました。 前回のMAP-E ROUTER by Debian Box (iptables) の続きです。 構成は以下の通りです。 internet client <-----> router(10.22.22.22:4848|192.168.1.1) <-----> (192.168.1.22:22) ssh server 10.22.22.22は実際にはmap-eで割り当てられたパブリックIPアドレスに読み替えて下さい。また、ポート番号(サンプルは4848番)は、map-eで割り当てられたポートから割り振ってください。また、tun0 ( map-e デバイス ) には、割り当てられたパブリックIPアドレス/32を設定しておいて下さい。 設定は非常にシンプルです。 iptables -t nat -A PREROUTING -p tcp -d 10.22.22.22 --dport 4848 -j DNAT --to-destination 192.168.1.22:22 iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.22 --dport 22 -j SNAT --to-source 192.168.1.1 外部から10.22.22.22の4848ポートに接続すると、192.168.1.22のssh serverに転送します。ただし、このままでは、192.168.1.22に届いても、ソースアドレスには到達できないので、ソースアドレスをルータの内側インターフェースにして、map-e router 経由でパケットを返すようにしています。 特定の固定ポートでしか通信できない場合は対応できませんが、sshやhttpのようにポート番号を指定して接続できる場合は有効です。map-eはCE側(ユーザ宅内)でのNATであって、プロバイダー側でのNATではないので、ポート指定は必要ながらも、外部にサービスを公開することはできます。筆者はこのため、map-eであるOCNバーチャルコネクトを今回は採用した次第です。