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

投稿

NATが効いている Debian 12 ルーターでの gre/gretap 通過について

以前は nf_nat_proto_gre モジュールを読み込む必要があったのですが、最近のカーネル(5.x,6.x)ではこのモジュールがなくなったので、ルータ越えで gre nat は使えないと思い込んでいました。しかし、どこで見たのか忘れましたが、 nat モジュールさえ効いていれば gre は nat ルータを通過できるとのことでした。そこでルータの設定を特にせず gre/gretap を以下のようにしてみたところ、確かに gre/gretap は nat (masquerading) の効いている Debian 12 ルータを同時に通過できました。 まず先にgretapの場合の /etc/network/interfaces.d/以下の設定です。 auto BX_US_DAL iface BX_US_DAL inet6 static address 2001:db8:1000:83::10b netmask 64 pre-up ip link add BX_US_DAL type gretap remote 192.0.2.1 local 10.1.1.106 ttl 255 post-down ip link del dev BX_US_DAL iface BX_US_DAL inet static address 203.0.113.2 netmask 24 ちなみにこちらは、as 番号さえあればフリーで IX に接続できる bgp.exchange というサイトで使用しているものです。(RFC5737 および 3849 に基づき、ドキュメント用にアドレスおよびマスク長を変更しています。以下同様)。 10.1.1.106 が NAT 越えさせたいマシンの内部ネットワークアドレスです。 なお、カーネルソースなどは追っていませんが、 remote ではなく local のアドレスを見て gre nat しているのではないかと思われます。というのも同一クライアントから gretap を複数セッション張る場合、エイリアスのアドレスを与えて local を 10.1.1.106に加え 10.1.1.116, 10.1.1.126のアドレスをイーサネットデバイスに付与し試したところ、同時に複数セッションを張ることが出来たからです。つま
最近の投稿

BIND9でIPv6 RDNSをサブネットに委任する

固定IPv6の環境が欲しいので、RIPEからAS番号を取得し、固定IPv6を利用できる環境を構築はしたのですが、プロバイダからはLIRサービスとして、例えば/32や/40などをレンタル出来たりします。しかし、/32や/40に対して 単一のRDNS(ReversDNS、逆引きDNS)の設定をするには、広大すぎます。 また、tunnelbroker.net でも、/64のネットワークだけでなく、/48のネットワークももらえます。そのうえRDNSの登録もできます。 しかし、/48のネットワークでも大きすぎるのでこれを/56のサブネットに分け/56のサブネットに対しRDNSを委任したいと思ったのですが、当然ながらTunnelbroker.netにそのような設定項目はありません。そこで/48で指定したRDNS/bind9上で少し試したところ、/56のサブネットに対し委任でき、また、前述の/40を/48に委任できたので、備忘録として挙げてみることにしました。 bind9のIPv6逆引きゾーンファイル(元が/48で/56を委任する場合)は以下の様になります。 $TTL 3600 ;zone01 2001:db8:abcd::/48 rev $ORIGIN d.c.b.a.8.b.d.0.1.0.0.2.ip6.arpa. @ IN SOA ns01.example.com. admin.example.com. ( 9 ; Serial 3600 ; Refresh 900 ; Retry 360000 ; Expire 3600 ; Negative cache TTL )

RIPE Databaseで IPv6 rDNS用のDomainオブジェクトを作成

表題の通りにするにあたり、前提条件がいくつかあります。まず、DNSサーバーが二台以上必要になります。(なお、RIPEのデーターベースでDomain オブジェクトを作成しようとすると、二台以上で物理的に距離があるもの、つまり、災害/障害に耐えうるようにする旨のメッセージがでました。通常、比較的規模の大きなドメインでの運用と同じなので納得しました。) 正引きDNSサーバに加え逆引きDNSサーバの設定をすませておき、さらに、SOAの設定などを先にすまして起動させておく必要があります。 当方の環境では最低限のDNSおよびrDNS設定を以下のようにし、起動させておきました。 まず、正引きの方です。サーバのIPv6アドレスが二つありますが、今回は2001:db8:ae00:0:5301::1 と 2001:db8:ae00:0:5302::2を使いました。 @ IN SOA ns01.example.net. admin.example.com. ( 2024111204; serial 3600 ; Refresh 900 ; Retry 1209600 ; Expire 3600 ; Negativ cache TTL ) IN NS ns01.exmample.net. IN NS ns02.exmample.net. ns01 IN AAAA 2001:db8:ae00:0:5301::1 ns01 IN

vxlanでIPv6 /40 プレフィックスを分割し IPv4 経由でクライアント側に /64 /48 プレフィックスをルーティング

プレフィックス長/40をBGPを使っている環境で取得し、クライアント側に vxlanをつかって /64 と /48 プレフィックスをルーティングさせてみたので、備忘録として挙げてみました。なお環境はクライアントサーバともにDebian 12(net inst, network-manager無)です。 まず最初は/40をどのように分割して複数のクライアントに/64と/48サブネットをルーティングさせるのかを検討してみました。 今回割り当てられた/40は 2001:db8:ae00::/40 だとします。/48サブネットは 2001:db8:ae00::/48のプレフィックス(つまり2001:db8:ae00:0::/48)で /64 と /80のvxlanインターフェースに割り当てるプレフィックスを予約して使用することにしてみましたので、/48サブネットは2001:db8:ae01::/40から2001:db8:aeff::/40までの255個にすることにしました。 続いてルーティングさせる/64ですが、前述の予約プレフィックスの内 2001:db8:ae00:01::/64 から 2001:db8:ae00:ff::/64 までの255個を割り当てるようにしました。 最後はvxlanに割り当てる/80のプレフィックスですが、2001:db8:ae00:0:01::/80から2001:db8:ae00:0:ff::/80までの255個を割り当てるようにしました。 この方針に沿い、vxlanのインターフェース名は、vxlan01からvxlanffまでの255個とします。これで、/40を255個に分割して/64と/48を割り当てることが出来ることになります。 プレフィックス割り当ての方針がきまったので、次は サーバ側のvxlan01(id=01)設定例です。なお、remote 10.1.1.2はクライアント側のグローバルアドレスです。 auto vxlan01 iface vxlan01 inet6 static address 2001:db8:ae00:0:01::1 netmask 80 pre-up ip link add vxlan01 type vxlan id 01 dstport 4789 remote 10.1.1.2

vxlan behind ipv4 nat

今回も表題通りなんですが、vxlanを ipv4 nat (ip masquerading) が効いている linux router (Debian 12, netwark-manager無) 越えで通信できたので備忘録として挙げてみました。やり方は二種類あります。一つはvni(id)を参照する方法で、もう一つは対向のIPv4アドレスを参照する方法です。まず、最初にvni(id)を参照する方法です。 パケットの絞り込みは こちら を参考にxt_u32モジュールを使いました。 クライアントのvni(id)は1002 (8bit 左シフトで256512) でローカルマシンのプライベートアドレスが192.168.1.1かつポートが4789でvxlanのインターフェースが立ち上がっていて、ルータの外側のIPv4インターフェースがtun0の場合、ルータ上でのiptables設定は以下のようになります。 # 1002 << 8 = 256512 # "0 >> 22 & 0x3C @ 12 & 0xFFFFFF00 = 256512" iptables -t nat -I PREROUTING -i tun0 -p udp --dport 4789 -m u32 --u32 "0 >> 22 & 0x3C @ 12 & 0xFFFFFF00 = 256512" -j DNAT --to-destination 192.168.1.1:4789 次は、対向のアドレスを参照する方法です。10.1.1.1が対向のグローバルアドレスで、192.168.1.1がローカルのプライベートアドレスの場合は以下のようになります。 iptables -t nat -A PREROUTING -i tun0 -s 10.1.1.1 -p udp --dport 4789 -j DNAT --to-destination 192.168.1.1:4789 こちらは vxlan の 複数拠点間接続機能を使う場合は、複数の対向アドレス分設定が必要になるはずです。(試していません。) vxlanのNAT越えそのものは以上です。 続いて、リモート側のインターフェース設定(ipv6グロー

Linux wireguard ipv6 over ipv6 with minimum policy based routing

前回はWindowsで wireguardを使い、ipv6 over ipv6を設定したのですが、Windowsはともかく(というか思いつかないだけですが)、Linux(Debian 12)では比較的簡単にポリシーベースルーティングができるので、通常のIPv6通信はアンダーレイで行い、Wireguardで張ったIPv6アドレス(例えばサーバを立てる場合など)に対しての通信は、オーバーレイで行うことができます。 早速ですが設定です。サーバ側はWindowsと同じです。 [Interface] PrivateKey = ******************************************** Address = 2001:db8:280:1:6400::1/80 ListenPort = 51920 [Peer] PublicKey = ++++++++++++++++++++++++++++++++++++++++++++ AllowedIPs = 2001:db8:280:1:6400::2/80, 2001:db8:280:6400::/56 PersistentKeepalive = 16 続いてクライアント側です。 [Interface] PrivateKey = ******************************************** Address = 2001:db8:280:1:6400::2/80 Table = off [Peer] PublicKey = ++++++++++++++++++++++++++++++++++++++++++++ EndPoint = [2001:db8:10:1018::a]:443 AllowedIPs = ::/0 PersistentKeepalive = 16 LinuxもWindowsと同じようにTable = offにしておいてください。 なおPostUp/PostDownはこちらに記述すると複雑になるので、今回は/etc/network/interfaces/wg000164に記述してみました。 iface wg000164 inet manual up wg-quick up wg000164 down wg-quick down wg00

Windows wireguard ipv6 over ipv6

既にIPv6接続できていることが大前提なんですが、WindwosのWireguardでIPv6 over IPv6を設定してみました。 鍵の生成などについては割愛しますが、サーバ側は以下のようになります。 # wg0001e4.conf [Interface] PrivateKey = ******************************************** Address = 2001:db8:280:01:e400::1/80 ListenPort = 52048 [Peer] PublicKey = ++++++++++++++++++++++++++++++++++++++++++++ AllowedIPs = 2001:db8:280:01:e400::2/80, 2001:db8:280:e400::/56 PersistentKeepalive = 16 次にクライアント側ですが、windowsの場合、スクリプトを走らせる為には管理者権限でregistryを操作する必要があります。 reg add HKLM\Software\WireGuard /v DangerousScriptExecution /t REG_DWORD /d 1 /f 項目名が物々しいのですが、実際スクリプトは管理者権限で走るのでこのような項目名になっているようです。 つづいてクライアント側のコンフィグは以下のようになります。 # wg0001e4 [Interface] PrivateKey = ******************************************** Address = 2001:db8:280:1:e400::2/80 PostUp = powershell.exe -command "netsh interface ipv6 add route prefix=::0/0 interface=%WIREGUARD_TUNNEL_NAME% metric=95" Table = off [Peer] PublicKey = ++++++++++++++++++++++++++++++++++++++++++++ AllowedIPs = ::/0 Endpoint = [2001:db8