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