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

投稿

11月, 2024の投稿を表示しています

gretap/gre tunnels to the same destination over nat

以前に投稿したように、同一リモートホストに対して、NAT配下の複数 gretap/gre クライアントからは、 キーを設定しても何もしていない場合は同時に接続できません。 理由はよくわかっていませんが、とりあえず挙動をしらべた所、同一リモートホストに対するパケットは、iptablesの PREROUTING raw/mangle までは通過しますが、key を設定していても、PREROUTING nat に入る前に暗黙的に破棄されていました。 そこで raw/mangleで keyを手掛かりにして破棄される前に packet を gretap/gre client に tee'd したところ、GRETAP クライアントにパケットは届きますが、当然ながら Destination Address は NAT ルータの外側のグローバル IPv4 アドレスのままなので、gretap/gre クライアントは応答しません。そこで、loopback インターフェースに NAT ルータの外側グローバル IPv4 アドレスを割り当て、さらに、リモートホストに対する gretap/gre パケットを 今一度 key を手掛かりに、raw/mangle でリモートに tee'd するようにしたところ、ping が通りました。最後に ssh/iperf3 でテストをしたところ、mtu の調整と再起動後に通信を開始するための ping は必要なのですが、無事疎通できたのでメモ代わりに挙げてみることにしました。 なお環境はリモート・ローカル・ルータのいずれも、Debian 12 Bookworm (Netinst) で構成し、ネットワークはフレッツ光クロス固定IP環境(enひかりクロス xpass 固定IP)でテストしています。 さて、今回はgretapでの要点のみの説明となりますが、greでもほぼ同じ要領です。まず、リモートホスト側です。こちらはInternetに直接つながっていることが前提です。 #/etc/network/interfaces.d/gretap100 auto gretap100 iface gretap100 inet6 static address fd99:1:1:100::1 netmask 64 mtu 1418 pre-u...

pptp clients behind Debian 12 nat router

最近のカーネル 6.x では 従来の方法 (modprobe -av ip_gre; modprobe -av nf_nat_pptp) だと lan内のpptp clients(複数同時) が linux nat router を通過できませんでした。そこで調べたところ、 こちら に6.x系で同じ症状の事が記述されており、nftables で対処できるとのことでした。 そこで、ほぼそのままですが以下のコマンドを流したところ、確かに同時に複数 pptp クライアントが(20241128追記:同一リモートホストに対して) Debian 12 nat router を無事通過できるようになりましたので忘備録として挙げてみました。 nft add table inet ct-helper nft add ct helper inet ct-helper pptp '{ type "pptp" protocol tcp; }' nft add chain inet ct-helper prerouting '{ type filter hook prerouting priority filter ; policy accept ; }' nft add rule inet ct-helper prerouting tcp dport 1723 ct helper set "pptp" コマンドは以上です。これらを流すと、nft list ruleset では以下のようになります。 --snip-- table inet ct-helper { ct helper pptp { type "pptp" protocol tcp l3proto ip } chain prerouting { type filter hook prerouting priority filter; policy accept; tcp dport 1723 ct helper set "pptp"...

フレッツ光クロスにて ネット接続ができないDebian 12 NetInstで最小インストール後、改めてネットワークの設定を行う

フレッツ光クロス(enひかりクロス xpass 固定ip)の場合で、ルータを構築するためにDebian 12でnetinstを行おうと思っても、そのままだと IPv6 アドレスの取得が通らず、netinst cdに入っている本当に最小限のインストールしかできません。 この場合 ssh のインストールもできませんし、もちろん他のパッケージもインストールできません。そこで最小インストール後にネットワーク接続して追加パッケージのインストールができ、仮運用ですがLAN側のクライアントからも接続できるるようになるまでをメモ代わりに挙げておくことにしました。 まずは /etc/sysctl.confの設定(変更箇所のみ)です。(なおDebianは最小インストールの場合、sudoがインストールされないので、su コマンドでインストール時に設定した root のパスワードを指定すると root になれます。) net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 変更したら sysctl -p としてください。 つづいいてネットワークインターフェースの設定です。WAN側(今回はenp1s0f1)は以下のようにします。 auto enp1s0f1 iface enp1s0f1 inet6 dhcp accept_ra 2 request_prefix 1 pre-up ip link set dev enp1s0f1 up ここで、ifup enp1s0f1としてください。(一度でうまくいかない場合は何度か繰り返します。)そうすると 2xxxで始まる prefixを取得し表示しているはずなので、これを書き留めておきます。なお ctrl+alt+Fxの組み合わせでvt(画面)を切り替えることができるので必要に応じて切り替えて下さい。 続いてLAN側(今回はenp1s0f0)です。こちらは以下のようにします。 auto enp1s0f0 iface enp1s0f0 inet static address 10.1.1.23 netmask 255.255.255.0 iface enp1s0f0 inet6 static address 2001:db8:a2a0:3c00::1 net...

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 ルータを同時に通過できました。(追記2024/12/01:同一リモートホストに対してNAT配下の複数クライアントからの同時接続についての記事を 別稿 で挙げてみました。) まず先に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 というサイトで使用しているものです。10.1.1.106 が NAT 越えさせたいマシンの内部ネットワークアドレスです。 なお、カーネルソースなどは追っていませんが、 remote に加え local のアドレスを見て gre nat しているのではないかと思われます。というのも同一クライアントから gretap を複数セッション張る場合、エイリアスのアドレスを与えて local を 10.1.1.106に加え 10.1.1.116, 10.1.1.126のアドレスをイーサネットデバイスに付与し試したところ、同時に(20241128追記:...

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 ...