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

投稿

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

unicast vxlan behind ipv4 nat

今回も表題通りなんですが、unicast の vxlanを ipv4 nat (ip masquerading) が効いている linux router (Debian 12, netwark-manager無、1固定IPv4アドレス) 越えで通信できたので備忘録として挙げてみました。やり方は二種類あります。一つは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のNAT越えそのものは以上です。 続いて、リモート側のインターフェース設定(ipv6グローバルアドレス付与)は以下のようにしてみました。(10.1.1.2は対向のローカル側...

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

softether vpnclientのインターフェースをDebian /etc/network/interfaces.d 以下でコントロール

通常のネットワークインターフェースとは異なり、アンダーレイネットワークがアップした後に、vpnclient/vpnserverが呼び出されてから、softehter のネットワークインターフェースは立ち上がります。このため例えば/etc/network/interfaces.d/vpn_eth0がsoftetherのデバイスだとすると、 NetInstでインストールしたミニマムな構成のDebian 12の場合、auto フレーズは使えません。 2025/01/08以下追記及び修正: ですが allow-hotplug フレーズを使うことで、アンダーレイネットワークがアップした後、softetherのネットワークが立ち上がった時に設定が適応されます。(つまり、wifi インターフェスと同じ様です。) # /etc/network/interfaces.d/vpn_eth0 allow-hotplug vpn_eth0 iface vpn_eth0 inet6 static address 2001:db8:280:200::100 netmask 64 # 以下ルーティング設定等 post-up echo f > /sys/class/net/vpn_eth0/queues/rx-0/rps_cpus post-up ip link set vpn_eth0 txqueuelen 10000 post-up echo 200 vpn_eth0 >> /etc/iproute2/rt_tables post-up ip -6 rule add from all to 2001:db8:280:200::/64 tab vpn_eth0 priority 200 post-up ip -6 rule add to all from 2001:db8:280:200::/64 tab vpn_eth0 priority 200 post-up ip -6 route add to 2001:db8:280:200::/64 dev vpn_eth0 tab vpn_eth0 post-up ip -6 route add to default via 2001:db8:280:200::1 dev vp...

sstp ipv6 over ipv6 を固定IPv6アドレスで設定

SSTP IPv6 over IPv6で接続できたので、忘れないうちに本稿を挙げてみることにしました。 今回、SSTPサーバはsoftehter-vpnserver(Debian 12自前ビルド)、クライアントはDebian 12で自前ビルドのsstp-clientを使いました。 早速ですが設定です。IPv6で接続するためには、サーバーのDNS正引きでAAAAが引けるようにしておきます。Aレコードを同じDNS名にしていてクライアントがIPv4の接続も持っているとAレコード、つまりIPv4で接続しようとするので、Aレコードのホスト名とAAAAレコードのホスト名は分けておいたほうが無難です。 次に、SSTPサーバーは、softether vpnserverをインストールしました。Debian純正パッケージだとSSTPサーバが機能しないようなので、 以前に投稿したパッケージ を使ってみてください。また、 softether-vpnserverをDebian 12上でle's encrypt の証明書をつかった構築はこちら にあります。 インストールがすんだら、Softetherサーバ管理マネージャーで接続し"OpenVPN/MS-SSTP設定"をクリックし、”MS-SSTP VPN ササーバー機能を有効にする”をチェックします。接続ユーザの登録ができていれば、基本的にはこれだけです。 つづいてクライアント側ですが、sstp-clientをインストールします。Debian 12純正パッケージだと依存パッケージが多いので、こちらは、 依存関係のすくないsstp-clientパッケージの作成方法 を投稿したので、よければ参考にしてみてください。なお設定は以下のようにしてみました。 ##/etc/ppp/chap-secrets # Secrets for authentication using CHAP # client server secret IP addresses user200@VPN * "SomeP@ssW0rds" * ##/etc/ppp/peers/sstp200 ########################...

インストール依存度の少ないsstp-client debパッケージを作成

Debian 12の場合だと、sstp-clientをaptでインストールしようとすると依存パッケージがnetwork-managerなど大量にあるので困惑していました。調べたところsstp-clientそのものは、pppdなどが必要なものの、ビルド環境に各種開発パッケージが入っていない場合、依存も少なくて済む(つまりconfigureでビルド環境をしらべた結果、依存が少ないと判断される)のでソースからパッケージを再度作成するだけでよさそうでした。実際にNetInstで構築したミニマムなビルド環境でパッケージをリビルドしたところ以下のようになり、余計なパッケージをインストールせずに済みました。 sudo apt-get install git build-essential devscripts dpkg-dev cd /usr/src mkdir sstp-client cd sstp-client apt-get source sstp-client apt-get build-dep sstp-client cd sstp-client-1.0.18 dpkg-buildpackage -nc -b sudo apt-get install ppp libevent-2.1-7 sudo dpkg -i sstp-client_1.0.18-1_amd64.deb libsstp-api-0_1.0.18-1_amd64.deb #エラーメッセージ・追加パッケージプロンプトなし aptは便利なんですが状況によっては依存がすくないパッケージを選択できればいいのにと思いました。 今回は以上です。それでは。

softether developer editionのDebian 12 .debパッケージを作成

レポジトリから取得したソースの自前ビルドだとsoftetherのサーバは大丈夫だったのですが、クライアントのほうがうまく動作していなかったので、調査も兼ねてdeb パッケージを作成してみました。(5.02.5187+git20241024)調べたところsystemdサービスファイルのパッチが正常に当たらないことが原因のようでした。またvpnclietの挙動が変わったのかもしれませんが、vpncmdをローカルで起動しRemoteEnableとPasswordSetしておかないと管理端末からは接続できませんでした。 パッケージの作成は以下のようにしましたが、いわゆる野良ビルドでとりあえずパッケージにしているだけなので注意してください。 sudp apt-get install git build-essential devscripts dpkg-dev pkg-config libsodium-dev sudo mkdir /usr/src/softether-vpn.deb.orig sudo chown buildUser:buildUser /usr/src/softether-vpn.deb.orig sudo mkdir /usr/src/softether-vpn sudo chown buildUser:buildUser /usr/src/softether-vpn cd /usr/src/softether-vpn.deb.orig su buildUser apt-get source softehter-vpn apt-get build-dep softether-vpn cd /usr/src/softether-vpn git clone https://github.com/SoftEtherVPN/SoftEtherVPN cd SoftEtherVPN git submodule init && git submodule update #サブモジュールを含めたソースコードの抽出 git ls-files --recurse-submodules | tar caf ../softether-vpn-5.02.5187+git20241024.orig.tar.gz --xform s:^:softethe...

softether developer editionをDebian 12にてソースからコンパイルしインストール

筆者は普段Debianを使っているのですが、Debian 12だとsoftehter-vpnserverパッケージはあるもののなぜかsstpでのクライアント接続がうまくいきませんでした。そこで少し調べたところsoftether developer editionだとSSTPにもIPv6にも対応しているようでした。Debianパッケージのソースコードと同じなんだろうと思っていたのですが、コンパイルしインストールした所SSTPでの接続も受け付けたので、何かが違うようでした。今回も備忘録なんですが、make installを使わずにビルドしたものをDebianと同じようなインストールを行ったので本稿をあげてみることにしました。余裕があれば調べてdebianパッケージにしたいのですがとりあえず以下のようにしました。 まず、先にDebianパッケージをインストールします。実行に必要なパッケージもインストールされるので、ここでvpncmdとGUIツールを使って設定などを済ませておいてください。設定ファイルはバックアップしてコンパイル・インストール後に復元するようにします。手順は以下の通りです。 sudo su #設定ファイルのバックアップ cp -a /var/lib/softether /root/var.lib.softether cp /lib/systemd/system/softether-vpnserver.service /root/softether-vpnserver.service #パッケージの削除 dpkg -P softether-common softether-vpnserver softether-vpncmd #設定ファイルの削除 rm -rf /var/lib/softether #ソース取得 cd /usr/src git clone https://github.com/SoftEtherVPN/SoftEtherVPN cd SoftEtherVPN git submodule init && git submodule update #ビルド cd /usr/src/SoftEtherVPN CMAKE_FLAGS="-DSE_PIDDIR=/run/softether -DSE_LOGDIR=...

softetherの基本設定をvpncmdとlet's encryptでlinux上にて行い、SstpクライアントからIPv6経由で接続

今回も表題通りなのですが、証明書のインストールと基本設定をvpncmdを使ってDebian 12で行ってみました。最初にコマンドで設定しておくと、後からGUIツールを使って簡単に操作できます。まずパッケージのインストールですが、以下のようにします。 apt-get install softether-vpnserver vpnserverのインストール時にvpncmdもインストールされるので大丈夫です。 次にlet's encryptの証明書を取得します。なお、証明書の取得をする前に、dnsで対象のホストが正引きできていることが条件です。今回の場合、vpnsv01.example.comはAAAAレコードのみにし、Aレコードはv4.vpnsv01.example.comにしましたが、IPv6経由の接続で機能できています。なお証明書の取得は以下のようにして、コマンドに間違いないかどうか確認します。説明は英文なので注意してください。 certbot certonly --dry-run --standalone --key-type rsa -d vpnsv01.example.com --email admin@example.com --deploy-hook "systemctl restart softether-vpnserver" 問題がなければ、--dry-runを外して実際に取得します。 つづいて設定をおこないます。vpncmdを起動しローカルホストを設定していきます。 1. 管理パスワードの設定と仮想ハブの作成 vpncmd 1を選択しエンター エンター のみ エンター のみ ServerPasswordSet サーバ管理パスワードを二回入力 HubCreate VPN ハブ管理パスワードを二回入力 Hub VPN (仮想ハブを選択) 2. ユーザの作成 UserCreate user1000 Assigned Group Name: (エンターのみ) User Full Name: user1000 (任意) User Description: user1000 (任意) UserPasswordSet user1000 パスワードを二回入力 ...