전송 트래픽이 VPN을 사용하도록하려면 어떻게해야합니까?


31

전송되는 서버가 VPN에 연결되어있을 때만 전송이 트래픽을 전송 / 수신하도록하고 싶습니다.

나는 유사하다이 질문을 발견 하지만 난 VPN을 통해 모든 트래픽을 강요하고 싶지 않아 내가 명령 줄에서 방화범 사용하는 방법에 대한 좋은 가이드를 찾을 수 없어.

대신 ufw를 사용하려고 생각했지만 방화벽에 대한 경험이 거의 없거나 전혀 없으며 커뮤니티에서 도움을 줄 수 있기를 바랍니다.

한 가지 아이디어는 전송이 특정 포트 (예 : 33442)를 사용하도록 강제 한 다음 VPN 서버의 IP 주소에서 해당 포트로의 트래픽 만 허용하는 것입니다. 우분투 서버 가이드를 확인했으며 다음과 같이 할 수 있다고 생각합니다.

sudo ufw enable
sudo ufw deny port tcp from localhost to any port 33442
sudo ufa allow port tcp from localhost to VPNIP port 33442
sudo ufw deny port udp from localhost to any port 33442
sudo ufa allow port udp from localhost to VPNIP port 33442

이 논리에 소금이 담겨 있습니까? 어떻게 하시겠습니까? VPN 서버의 공용 IP 인 VPNIP에 무엇을 사용하거나 VPN이 연결되는 로컬 서브넷 범위를 지정해야합니까?

당신의 도움을 주셔서 감사합니다!

답변:


25

vpnroute그룹 만들기 :

sudo groupadd vpnroute

인터페이스를 거치지 않는 그룹 iptables구성원의 발신 네트워크 연결을 거부 하는 규칙을 추가하십시오 .vpnroutetun0

sudo iptables -A OUTPUT -m owner --gid-owner vpnroute \! -o tun0 -j REJECT

vpnroute그룹 구성원으로 전송 프로세스를 시작하십시오 .

sudo -g vpnroute transmission-gtk &

1
이것이 바로 내가 찾던 것입니다. 감사!
Taeram

3
경고 : Deluge는 sup 프로세스를 생성하기 때문에 AFAICT Deluge에서는 작동하지 않습니다. 나는 그것을주의 깊게 테스트했고 설정이 맞습니다. sudo -g vpnroute ping google.com은 tun0에서 VPN을 활성화 할 때까지 '대상에 연결할 수 없습니다'를 표시합니다. 그러나 Deluge UI는 VPN 연결 여부에 관계없이 항상 토렌트를 다운로드 할 수 있습니다. pgrep -G vpnroute를 사용하면 초기 / usr / bin / python 프로세스 만 vpnroute GID에서 실행되기 때문에 생성 된 deluge-gtk 프로세스가 아닌 것 같습니다.
happyskeptic

10
누군가 각 단계가 무엇을하는지 정확하게 설명 할 수 있습니까?
ohnoplus

2
전송에는 특정 주소를 수신 할 수 있지만 특정 인터페이스를 수신 할 수는 없습니다. 커맨드 라인에서 시작하면, --bind-address-ipv4 $IP_ADDR바인딩 할 주소를 Transmission에 알려줍니다. 그러면 트래픽이 올바른 위치에 도달 할 수 있도록 올바른 라우팅 규칙이 필요합니다. 내가 어떻게 관리 했는지이 질문 을 살펴보십시오.
seanlano 2019

3
@ohnoplus "vpnroute"라는 그룹을 만듭니다. VPN을 통과하지 않는 해당 그룹의 구성원이 만든 발신 네트워크 연결을 거부하는 방화벽 규칙을 추가합니다 (여기서는 "tun0"인터페이스로 정의되지만 일부 시스템은 다를 수 있음). "vpnroute"그룹의 구성원으로 실행중인 전송 프로세스를 시작합니다.
TommyPeanuts

4

이것은 헤드리스 전송을 위해 작동합니다. 전송 서비스를 실행하는 사용자를 기반으로 트래픽을 제한하고 10.0.0.0/8있습니다. 내부 네트워크는 네트워크와 일치하도록 변경해야 tun0합니다. OpenVPN 인터페이스이며 eth0LAN 연결입니다.

sudo루트가 아닌 경우 명령에 추가하십시오 .

iptables -F (우리는 -F 스위치를 사용하여 기존의 모든 규칙을 플러시하므로 새 규칙을 추가 할 수있는 깨끗한 상태로 시작합니다.)

iptables -L (현재 설정 목록)

NET=10.0.0.0/8
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT

재시작 후 iptables를 영구적으로 만듭니다.

apt-get install iptables-persistent
service iptables-persistent start

$ sudo iptables -A OUTPUT -d 10.0.0.0/8 -p tcp --sport 9091 -m owner --gid-owner debian-transmission -o eth0 -j ACCEPT iptables v1.4.12 : 소유자 : "--gid-owner"옵션에 대한 잘못된 값 : "debian-transmission"뭔가 빠졌습니까?
ohnoplus

예, @ohnoplus :) 먼저 debian-transmission 그룹 (또는 소유자)을 만들어야합니다. 이 그룹 또는 user : group으로 응용 프로그램을 실행하고 있는지 확인하십시오.
Joachim

이것이 바로 Transmission Remote 웹 인터페이스를 활성화하는 데 필요한 것입니다. 감사합니다!
Zane Hooper

4

다음은 데비안 전송 사용자 그룹 (즉, 전송)이 VPN을 통해서만 데이터를 라우팅하는지 확인하는 데 필요한 NOOBS (데비안 사용)에 대한 완전한 'HOW TO'입니다.

복잡한 시스템 스크립트를 기반으로 VPN에 더 긴 '방법'을 사용하지 마십시오 ...! iptables는 최고입니다. -전송 사용자 및 그룹에 기반한 몇 가지 IPTABLE 룰을 사용하여 VPN을 제어하고 (시스템 스크립트, 위아래 스크립트 등을 사용하는 더 복잡한 '해킹'방법과는 달리 ...) 너무 간단합니다!

1 단계-설정 : (전송이 설치되었고 데비안 전송 사용자가 있다고 가정합니다!)

sudo apt-get install iptables
sudo apt-get install iptables-persistent

2 단계-transmission-ip-rules 파일 작성

sudo nano transmission-ip-rules

아래에서 시작하여 아래 코드 블록에 텍스트를 추가하십시오. #!/bin/bash

중대한

  • 로컬 네트워크가 192.168.1.x 형식이 아닌 경우 NET 변수를 사용자 고유의 로컬 네트워크 주소 지정 형식에 맞게 변경하십시오 !!.
  • 또한 192.168.1.0/25가 실제로 192.168.1.0-255의 범위를 제공한다는 단점을 알고 있어야합니다!
  • 때로는 인터페이스 eth0, tun0 (vpn) 등이 다를 수 있습니다. 'ifconfig'로 확인하고 필요한 경우 변경하십시오.
#!/bin/bash
# Set our rules so the debian-transmission user group can only route through the vpn
NET=192.168.1.0/25
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT
# not needed - but added these to properly track data to these interfaces....when using iptables -L -v
iptables -A INPUT -i $IFACE_VPN -j ACCEPT
iptables -A INPUT -i $IFACE_INTERNAL -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# track any forward (NAT) data for completeness - don't care about interfaces
iptables -A FORWARD

파일을 저장 한 후 실행

sudo iptables -F 
sudo chmod +x transmission-ip-rules
sudo ./transmission-ip-rules

그런 다음 재부팅을 통해 다음 규칙을 유지하십시오.

sudo dpkg-reconfigure iptables-persistent

두 프롬프트에 모두 예를 탭하십시오. 끝난!

이 스크립트의 장점은 장치를 통해 모든 데이터를 추적한다는 것입니다! 발행 할 때

sudo iptables -L -v

VPN 인터페이스가 제대로 작동하는지 확인할 수 있도록 인터페이스 및 입력 또는 출력쪽에 얼마나 많은 데이터가 있는지 보여줍니다. 예를 들어;

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
1749K  661M ACCEPT     all  --  tun0   any     anywhere             anywhere                                                                                            
3416K 3077M ACCEPT     all  --  eth0   any     anywhere             anywhere                                                                                            
 362K  826M ACCEPT     all  --  lo     any     anywhere             anywhere                                                                                            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
    0     0            all  --  any    any     anywhere             anywhere                                                                                            

Chain OUTPUT (policy ACCEPT 2863K packets, 2884M bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
 1260  778K ACCEPT     tcp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       tcp spt:9091 owner GID match debian-transmission
    0     0 ACCEPT     udp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       udp spt:9091 owner GID match debian-transmission
1973K 1832M ACCEPT     all  --  any    tun0    anywhere             anywhere                                                                                                     owner GID match debian-transmission
 8880  572K ACCEPT     all  --  any    lo      anywhere             anywhere                                                                                                     owner GID match debian-transmission
13132  939K REJECT     all  --  any    any     anywhere             anywhere                                                                                                     owner GID match debian-transmission reject-with icmp-port-unreachable

이 스크립트는 VPN에서 연결, 연결 해제, 재부팅시 철저하게 테스트되었습니다. 잘 작동합니다. 전송은 VPN 만 사용할 수 있습니다. 이 스크립트가 다른 스크립트보다 큰 장점은iptables -L -v) 데이터가 각 인터페이스 eth0, vpn (tun0)에 대해 INPUT (all) 및 Forward (all) 규칙을 추가하여 전송을 통해 풀링 된 데이터와 일치하는지 확인하십시오. 그래서 당신은 무슨 일이 일어나고 있는지 정확히 알고 있습니다! 데이터 총계는 전송과 정확하게 집계되지 않습니다. 불행히도 INPUT 쪽에서 debian-transmission 사용자로 구별 할 수 없으며 동일한 VPN을 사용하는 추가 오버 헤드와 다른 프로세스가있을 수 있지만 데이터는 대략적으로 키가 큽니다. 입력쪽에 있고 VPN의 작동을 확인하기 위해 OUTPUT의 절반 정도입니다. 주목해야 할 또 다른 점-VPN 연결이 끊어지면 (모든 트래픽이 전송으로 중지됨) 잠시 기다렸다가 새 VPN에서 '가져 오기'위해 전송을 위해 다시 연결하므로 다시 토런트를 시작하는 데 약 5 분이 걸리더라도 걱정하지 마십시오. .

팁-Google 'MAN iptables'를 사용 하고이 스크립트의 작동 방식을 한 줄씩 알고 싶다면 대역폭 모니터링에 대한 이 기사를 참조하십시오 ...


3

이상적으로는 특정 인터페이스 (VPN 인터페이스)에 바인딩하는 기능이있는 토렌트 클라이언트를 사용해야합니다.

토렌트 클라이언트 중 Deluge가이를 수행합니다. 따라서 Deluge를 설치하고 기본 설정에서 인터페이스를 구성 할 수 있습니다.


답변 주셔서 감사합니다. 실제로 실제로 Transmission을 사용하도록 설정되어 있습니다. Transmission을 사용하여 특정 인터페이스 또는 IP 범위 (VPN 만 사용)에 바인딩 할 수 있는지 알고 있습니까? 감사!
Evan

2
@ user4124 명령 줄 또는 webui를 통해 Deluged를 특정 네트워크 인터페이스에 바인딩하는 방법을 알고 있습니까? 아무도 Transmission을 사용 하여이 작업을 수행하는 방법을 모르는 것처럼 Deluge를 시도했지만 지금까지 운이 없었습니다. 감사!
Evan

3
@Evan listen_interfacedeluge 콘솔 또는 네트워크 옵션의 인터페이스에서 Deluge에 바인딩 할 IP 주소를 지정할 수 있습니다.
Cas

이것이 사실이지만 불법 토렌트 다운로드를 숨기려는 유일한 목적이더라도 VPN 익명을 포용하고 시스템 전체에서 하나의 프로그램에서만 작동하지 않는 솔루션을 찾아야합니다.
redanimalwar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.