DigiLoog

PC関係の事なら何でもいけるそんな処

Archive for 2020年08月08日

VyOSでIPv6-Only IPSecVPN設定時に出るエラー回避方法

2020年08月08日(土) - 22:35 | カテゴリ: Network

“ns-lab BB”の自宅サーバとリモートで動いているVPS・専用サーバを繋ぐ為、
VyOSを使って拠点間IPSecVPNを構築してNW通信が出来る様にしてある。

従来はVPN専用に固定IPプロバイダを契約してIPv4 IPSecVPNを張っていたのだが、
費用とVPN冗長化の課題が出てきたので何とかしようと考えていた。
そんな中『PPPoEで大量に振ってくるIPv6を使えば専用プロバイダいらないのでは!?』
と思い立ったので、IPv6 IPSecVPNへ移行する事にした。

………

そうなると、IPv6アドレスのみ付与したインターフェースでIPSecを張る必要が出てくるのだが、
VyOS v1.2.Xに設定を投入するとこんなエラーが出てきた。

# commit
[ vpn ipsec site-to-site peer 2001:ffff:ffff:ffff::1 tunnel 1 ]
VPN configuration error: IPv4 over IPv6 IPsec is not supported

Warning: Local address 2001:0:0:0::1 specified for peer "2001:ffff:ffff:ffff::1"
is not configured on any of the ipsec-interfaces and is not the
clustering address.  IPsec must be re-started after address
has been configured.

VyOS公式でもバグ報告が上がっているのだが、優先度低になっており何時直るのか判らない状況。
コレが出来ないとIPv6環境に移行が出来ないのは勿論の事、修正を待って何もしないのもどうかと思ったので、
自力でVyOS内のIPSec設定スクリプトを直してみた。

………

修正箇所は次の通り。スクリプトがperlで書かれていたので読みやすかった。
どうやら、IPv6のみ付与したインターフェースでIPSecを設定しようとすると、
条件判定に引っかかってしまいエラーが出る様だった。
この問題は、VyOSのフォークとなるEdgeRouterでも発生するらしく、
先人の知恵も借りながら次の通りに修正してみた。

 

修正前:[/opt/vyatta/sbin/vpn-config.pl]

  550    # Check remote/local and peer protocol consistency
  551    # IPv6 over IPv6 scenario is actually supported by StrongS/WAN,
  552    # we do not allow it in this version because of design and QA issues.
  553    if (($conn_proto != 6) && ($leftsubnet_proto == 6)) {
  554        vpn_die(["vpn", "ipsec", "site-to-site", "peer", $peer, "tunnel", $tunnel],
                 "$vpn_cfg_err IPv6 over IPv4 IPsec is not supported");
  555    } elsif (($conn_proto == 6) && ($leftsubnet_proto != 6)) {
  556        vpn_die(["vpn", "ipsec", "site-to-site", "peer", $peer, "tunnel", $tunnel],
                 "$vpn_cfg_err IPv4 over IPv6 IPsec is not supported");
  557    }

 

修正後:[/opt/vyatta/sbin/vpn-config.pl]

  550    # Check remote/local and peer protocol consistency
  551    # IPv6 over IPv6 scenario is actually supported by StrongS/WAN,
  552    # we do not allow it in this version because of design and QA issues.
  553    if (($conn_proto != 6) && ($leftsubnet_proto != 0 and $leftsubnet_proto == 6)) {
  554        vpn_die(["vpn", "ipsec", "site-to-site", "peer", $peer, "tunnel", $tunnel],
                 "$vpn_cfg_err IPv6 over IPv4 IPsec is not supported");
  555    }
  556    if (($conn_proto == 6) && ($leftsubnet_proto != 0 and $leftsubnet_proto != 6)) {
  557        vpn_die(["vpn", "ipsec", "site-to-site", "peer", $peer, "tunnel", $tunnel],
                 "$vpn_cfg_err IPv4 over IPv6 IPsec is not supported");
  558    }

554行目と557行目は幅の関係で改行しているが実際は1行で書く。
実際の修正箇所は553行目と556行目の判定処理。
この改修を入れると、IPv6 IPSec VPNも設定が通る様になった。
だが、VyOSのアップグレードをすると元に戻る筈なので注意が必要。
そのうち公式修正で直ると思うが、それまではこの改修でお茶を濁そうと思う。



  • 応援中

    はじめるセカイの理想論 -goodbye world index-