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