1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry-Pi 4Bをルータとして使用し、DS-Lite接続するための設定です。OSをUbuntu 24.04に入れ替えたので、その時の記録として。
なお、Wi-Fiルータは、リピータモードで家内LANに設置して使用しています。

Ubuntu 24.04 for Raspberry Piのダウンロードと書き込み

Install Ubuntu on a Raspberry Piのページの「Download Ubuntu Server 24.04.1 LTS」のリンクからisoイメージをダウンロードし、rpi-imagerを使ってUSBメモリへ書き込みました。

起動

上のイメージは、すぐに起動するようになっているものなので、電源をいれると起動します。アカウントは、ubuntu/ubuntuです。すぐに、更新用のパスワードの入力を求められます。HDMIに繋いで作業をしました。

USB-Etherアダプタの接続

DS-Liteを使うには、Rapsberry Piに付いているEthernetポートの他に、USB-Etherアダプタを使います。まぁ、なくても使えないことはないですがあまり意味ないので、その設定の説明はここではしません。

netplanの設定

下記の設定がnetplanの設定です。eth0がRaspberry PiのEthernetポート、enx18ece795fe96がUSB-Etherポートになります。おそらく、USB-Ether側のnameserversは要らないんじゃないかと思います。
内部ネットワークは、192.168.0.0/24で、Raspberry Piのアドレスは、192.168.0.1にしてあります。
xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxxは、DHCPで割り当てられるipv6のアドレスです。これは、IPv6の取得 - ESPRESSObinでDS-Liteの中で取得方法を書いていますが、おそらく同じようにやれば取得できるのではないかと思います。未だにその時のアドレスを使いまわしています。yyyy.yyyy.yyyy.yyyy,yyyy.yyyy.yyyyも同様です。
ネームサーバーの、2001:4860:4860::88882001:4860:4860::8844は、GoogleのDNSです。

network:
    ethernets:
        enx18ece795fe96:
            dhcp4: false
            dhcp6: false
            ignore-carrier: true
            addresses:
            - 192.168.0.1/24
            nameservers:
                addresses:
                - localhost
                - 8.8.8.8
                - 1.1.1.1
            optional: true
        eth0:
            dhcp4: false
            dhcp6: false
            optional: false
            ignore-carrier: true
            addresses:
            - xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx/64
            routes:
            - to: default
              via: yyyy.yyyy.yyyy.yyyy,yyyy.yyyy.yyyy
            nameservers:
                address:
                - 2001:4860:4860::8888 2001:4860:4860::8844
    version: 2

netplan applyとするとRaspberry-PiにIPアドレスが適用され、aptコマンドなどが使えるようになると思います。

パケットフィルタ

以上に加えて、パケットフィルタをしています。以下はどこからか拾ってきたものです。これがないとEthernetポートとUSB-Etherポート間の転送ができないんだったような。

#!/bin/sh
# ip6tables.sh

WAN_IF=eth0
LAN_IF=enx18ece795fe96
LAN_SUBNET=fd00:1fe::/64

# いったんルールをflush
ip6tables -t filter -F
ip6tables -t mangle -F
ip6tables -t nat -F
ip6tables -F

# filter tableはdefaultではINPUT, FORWARDはDROP, OUTPUTはACCEPT
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P OUTPUT ACCEPT
ip6tables -t filter -P FORWARD DROP

# loopbackはACCEPT
ip6tables -t filter -A INPUT -i lo -j ACCEPT
# LAN側はACCEPT
ip6tables -t filter -A INPUT -i $LAN_IF -j ACCEPT
# セッション確立後はACCEPT
ip6tables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# ICMPv6は利用しないredirectだけDROPし、他はACCEPT
ip6tables -t filter -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type redirect -j DROP
ip6tables -t filter -A INPUT -p ipv6-icmp -j ACCEPT

# LAN側からWAN側にForwardされる通信はACCEPT
ip6tables -t filter -A FORWARD -s $LAN_SUBNET -o $WAN_IF -j ACCEPT
# セッション確立後はACCEPT
ip6tables -t filter -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# ICMPv6はecho-request(ping)/echo-reply(pong)のみ許可
ip6tables -t filter -A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type echo-request -j ACCEPT
ip6tables -t filter -A FORWARD -p ipv6-icmp -m icmp6 --icmpv6-type echo-reply -j ACCEPT

# mangle tableはすべてACCEPT
ip6tables -t mangle -P PREROUTING ACCEPT
ip6tables -t mangle -P INPUT ACCEPT
ip6tables -t mangle -P FORWARD ACCEPT
ip6tables -t mangle -P OUTPUT ACCEPT
ip6tables -t mangle -P POSTROUTING ACCEPT

ip6tables.shとして保存して、rootで./ip6tables.shとしt実行します。実行後、以下で保存しておきます。ip6tables.shは、iptables-persistentパッケージにあるので、aptでインストールが必要です。

sudo ip6tables-save > /path/to/active6

routing

更にに、USB-EtherポートからのアクセスをWAN側に通すための設定です。私は、これを/etc/rc.localに書きましたが、ちゃんとしたやり方がありそうです。
mtuの設定は3000としてありますが、不要なら削除しても大丈夫です。

#!/bin/bash

REMOTE='2404:8e00::feed:100'
LOCAL='xxxx:xxxx:xxxx:xxx:xxxx:xxxx:xxxx:xxxx'

# IPIP6 tunnel linkup
ip -6 tunnel add ip6tnl1 mode ip4ip6 remote $REMOTE local $LOCAL dev wan
ip link set dev ip6tnl1 up

ifconfig ip6tnl1 mtu 3000

# IPv4 routing
route add default dev ip6tnl1

# restore iptables
ip6tables-restore /path/to/acrive6

exit

ファイルを作成したら、chmod +x /etc/rc.localして実行権を与えておきます。
/etc/rc.localを実行すれば、EthernetポートとUSB-Ether間の通信ができるようになるはずです。

カーネルパラメータ

もう一つ、EthernetポートとUSB-Etherアダプタ間の通信には、パケットフォワーディングの設定がいります。/etc/sysctl.confで以下を設定します。

net.ipv4.ip_forward=1

これを有効にするには、以下のコマンドを使います。

sudo sysctl -p

DHCPサーバー

以下でインストールします。

sudo apt install isc-dhcp-server

設定は、192.168.0.128-192.168.0.200をDHCPにする場合、こうなります。/etc/dhcp/dhcpd.confに設定します。

option domain-name "internal.aka-minnie.com";
option domain-name-servers 8.8.8.8;
authoritative;
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.128 192.168.0.200;
  option broadcast-address 192.168.0.255;
  option routers 192.168.0.1;
}

設定を有効にするには、以下です。

sudo systemctl enable isc-dhcp-server
sudo systemctl restart isc-dhcp-server
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?