IPSEC VPNをネットワークインターフェイスに接続する

IPSEC VPNをネットワークインターフェイスに接続する

Ubuntu 22.04.4 LTSサーバーでStrongSwan IPSEC VPNを設定しました。 VPNが起動し、プライマリインターフェイス(eno1)に正常に接続されます。

qBittorrentを使用してVPNを介して急流トラフィックを転送するために、VPN接続に割り当てられているIPアドレスにバインドします。 (他のネットワークトラフィックはVPNを介して送信されません。)これは成功するため、VPNがダウンすると急流トラフィックが停止します。

問題は、再接続後にVPNが自分に別のIPアドレスを割り当てることができることです。したがって、急流トラフィックは再開されません。

tunインターフェイス(tun0)を設定し、VPNをそのインターフェイスに直接接続してこの問題を解決したいと思います。その後、qBittorrentに特定のIPアドレスの代わりに常にtun0インターフェイスに接続を維持するように指示できます。

ただし、tun0インターフェイスに接続されているVPNを介してデータを流すことはできません。どんな助けでも大変感謝します。

これが私が今まで持っているものです:

sudo tunctl -t tun0        # create tun0 interface
sudo ip link set tun0 up   # enable tun0 interface

/etc/strongswan.d/vtun.conf を編集します。

charon {
  install_routes = no
  install_virtual_ip_on = tun0  # Connect VPN to tun0 interface
  if_id_in = 1
  if_id_out = 1
  remote_ts = 10.128.0.0/16
}

VPNを再起動します。

sudo ipsec down vpn-ca-torrent  # shut down VPN
sudo ipsec restart              # restart ipsec 
sudo ipsec up vpn-ca-torrent    # start VPN

VPN が tun0 に接続されました。

> ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 98:90:96:c0:1b:8c brd ff:ff:ff:ff:ff:ff
    altname enp0s25
    inet 192.168.0.5/24 metric 100 brd 192.168.0.255 scope global dynamic eno1
       valid_lft 84935sec preferred_lft 84935sec
    inet6 fe80::9a90:96ff:fec0:1b8c/64 scope link
       valid_lft forever preferred_lft forever
3: tun0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 8a:2d:38:87:5d:5c brd ff:ff:ff:ff:ff:ff
    inet 10.128.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever

qBittorrentをtun0インターフェイスに接続しましたが、データストリーミングはありません。

追加情報は次のとおりです。

> sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 32400 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP

> cat /etc/ipsec.conf
  conn vpn-ca-torrent
        keyexchange=ikev2
        dpdaction=clear
        dpddelay=300s
        [email protected]
        leftauth=eap-mschapv2
        left=%defaultroute
        leftsourceip=%config
        right=ca-tr.vpnunlimitedapp.com
        rightauth=pubkey
        rightsubnet=0.0.0.0/0
        rightid=ironnodes.com
        type=tunnel
        auto=add
        leftupdown=/usr/lib/ipsec/_updown

> ip r
default via 192.168.0.1 dev eno1 proto dhcp src 192.168.0.5 metric 100
192.168.0.0/24 dev eno1 proto static
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.5 metric 100
192.168.0.1 dev eno1 proto dhcp scope link src 192.168.0.5 metric 100

> resolvectl
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub

Link 2 (eno1)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.0.1
       DNS Servers: 192.168.0.1

Link 3 (tun0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

修正する:

提案どおりに変更を追加しました。

/etc/strongswan.d/vtun.conf:

charon {
  install_routes = no
  install_virtual_ip_on = tun0
  if_id_in = 1
  if_id_out = 1
  remote_ts = 10.128.0.0/16

  leftfirewall=yes
  leftsourceip=%config
  leftsubnet=10.128.0.2/32
  rightsubnet=10.128.0.0/16
}

VPN が動作して tun0 インターフェイスに接続したら、指定した IP にルートを追加します。

sudo ip ルート 10.128.0.XX 経由で 10.128.0.0/16 dev tun0 を追加

リモートIP 10.128.0.XXにpingを送信できますが、qBittorrentはまだそれを介してトラフィックを送信できません。

Charon ログを表示すると、次のエラーが表示されます。

  11[IKE] scheduling reauthentication in 9950s
  11[IKE] maximum IKE_SA lifetime 10490s
  11[IKE] adding DNS server failed
  11[IKE] adding DNS server failed
  11[CFG] handling INTERNAL_IP4_DNS attribute failed
  11[IKE] installing new virtual IP 10.128.0.2
  11[CFG] selected proposal: ESP:AES_CBC_256/HMAC_SHA2_256_128/NO_EXT_SEQ
  11[IKE] CHILD_SA vpn-ca-torrent{3} established with SPIs ca04de43_i ce23bdaf_o and TS 10.128.0.2/32 === 0.0.0.0/0

IPアドレス:

default via 192.168.0.1 dev eno1 proto dhcp src 192.168.0.5 metric 100
10.128.0.0/16 via 10.128.0.2 dev tun0 linkdown
192.168.0.0/24 dev eno1 proto static
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.5 metric 100
192.168.0.1 dev eno1 proto dhcp scope link src 192.168.0.5 metric 100

IPアドレス:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 98:90:96:c0:1b:8c brd ff:ff:ff:ff:ff:ff
    altname enp0s25
    inet 192.168.0.5/24 metric 100 brd 192.168.0.255 scope global dynamic eno1
       valid_lft 66730sec preferred_lft 66730sec
    inet6 fe80::9a90:96ff:fec0:1b8c/64 scope link
       valid_lft forever preferred_lft forever
3: tun0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 8a:2d:38:87:5d:5c brd ff:ff:ff:ff:ff:ff
    inet 10.128.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever

答え1

問題はデフォルトパスを持たないtun0インターフェイスに関連しているように見えるため、VPNサーバーにパケットを転送する方法がわかりません。

この問題を解決するには、VPN サーバーの IP アドレスを 10.128.0.0/16 サブネットのゲートウェイを指す tun0 インターフェイスに静的ルートを追加するだけです。その後、このサブネットに向けられたすべてのパケットをVPNサーバーに送信するようにインターフェイスに指示します。

VPNサーバーのIPアドレスが10.128.0.1であると仮定すると、ファイルに次のコマンドを追加できます/etc/strongswan.d/vtun.conf

leftfirewall=yes
leftsourceip=%config
leftsubnet=10.128.0.2/32
rightsubnet=10.128.0.0/16

起動したら、 tun0 インターフェイスに次のパスを追加します。

sudo ip route add 10.128.0.0/16 via 10.128.0.1 dev tun0

これにより、トラフィックが tun0 インターフェイスに接続された VPN を通過できるようになります。ルーティングテーブルへの変更は再起動後も持続しないため、このコマンドを起動スクリプトに追加するか、ルータで設定する必要があります。

また、IKE バージョン、暗号化アルゴリズム、認証メカニズムなどの特定の設定に合わせて StrongSwan Charon の設定を調整する必要がある場合があります。

最後に、StrongSwanデーモンのログを調べて、問題をさらに診断するのに役立つ可能性があるエラーメッセージまたは警告があるかどうかを確認できます。次のコマンドを実行してこれを実行できます。

sudo journalctl -f -u charon.service

関連情報