我在 Ubuntu 22.04.4 LTS 服务器上配置了 StrongSwan IPSEC VPN。 VPN 启动并成功连接到主接口(eno1)。
使用 qBittorrent,我绑定到分配给 VPN 连接的 IP 地址,以便通过 VPN 引导 torrent 流量。 (我不通过 VPN 发送任何其他网络流量。)此操作成功,因此如果 VPN 断开,Torrent 流量就会停止。
问题是,重新连接后,VPN 可能会为我分配不同的 IP 地址。因此,洪流流量永远不会恢复。
我希望通过设置 tun 接口 (tun0) 并将 VPN 直接连接到该接口来解决这个问题。然后我可以让 qBittorrent 始终保持连接到 tun0 接口而不是特定的 IP 地址。
但我无法让数据流过连接到 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 route add 10.128.0.0/16 dev tun0 通过 10.128.0.XX
我可以 ping 远程 ip 10.128.0.XX,但 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 服务器。
要解决此问题,您可以向 tun0 接口添加静态路由,指向 VPN 服务器的 IP 地址作为 10.128.0.0/16 子网的网关。这将告诉接口将所有发往该子网的数据包发送到 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。请记住,对路由表的更改在重新启动后不会持久,因此您可能需要将此命令添加到启动脚本中或在路由器中配置它。
另请注意,您可能需要调整 StrongSwan Charon 的配置以匹配您的特定设置,例如 IKE 版本、加密算法和身份验证机制。
最后,您可能需要检查 StrongSwan 守护程序的日志,看看是否有任何错误消息或警告可以帮助您进一步诊断问题。您可以通过运行以下命令来执行此操作:
sudo journalctl -f -u charon.service