VPN을 사용한 VoIP(Voice over IP)

VPN을 사용한 VoIP(Voice over IP)

VPN 클라이언트로 IPFire(Linux) 라우터를 사용하고 있습니다. My Voice over IP는 VPN을 활성화하지 않아도 잘 작동합니다. 하지만 VPN이 활성화되면 내 SIP 클라이언트(Twinkle)가 내 VoIP 공급자에 등록할 수 없습니다. 일반적으로 내 VPN은 항상 실행 중입니다. 그래서 VPN과 VoIP가 작동하도록 해야 합니다.

uname -a
Linux ipfire 3.14.65-ipfire #1 SMP Wed May 4 03:06:53 GMT 2016 x86_64 GNU/Linux

privateinternetaccess.com에서 제공하는 VPN입니다.

다음 명령을 사용하여 VPN 클라이언트를 시작합니다.

modprobe tun
openvpn --config /var/ipfire/ovpn/my_vpn.conf --daemon

내가 사용하는 포트 전달 설정은 다음과 같습니다.

On  Proto   Src     Port        Destination    Description
On  UDP     RED     5060        192.168.1.1     SIP_voip
On  TCP     RED     5060        192.168.1.1     SIP_voip
On  UDP     RED     8000        192.168.1.1     SIP_twinkle_RTP
On  UDP     RED     8001        192.168.1.1     SIP_twinkle_RTP
On  UDP     RED     8002        192.168.1.1     SIP_twinkle_RTP
On  UDP     RED     8003        192.168.1.1     SIP_twinkle_RTP
On  UDP     RED     8004        192.168.1.1     SIP_twinkle_RTP
On  UDP     RED     8005        192.168.1.1     SIP_twinkle_RTP

이것은 내 openvpn 클라이언트 설정입니다.

client
dev tun
proto udp
remote example.com
port 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /var/ipfire/ovpn/ca.crt
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0
crl-verify /var/ipfire/ovpn/crl.pem
ping 15
ping-restart 45

iptables 규칙($ sudo iptables -S):

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N BADTCP
-N CONNTRACK
-N CUSTOMFORWARD
-N CUSTOMINPUT
-N CUSTOMOUTPUT
-N DHCPBLUEINPUT
-N DHCPBLUEOUTPUT
-N DHCPGREENINPUT
-N DHCPGREENOUTPUT
-N DHCPINPUT
-N DHCPOUTPUT
-N FORWARDFW
-N GEOIPBLOCK
-N GUARDIAN
-N GUIINPUT
-N ICMPINPUT
-N INPUTFW
-N IPSECBLOCK
-N IPSECFORWARD
-N IPSECINPUT
-N IPSECOUTPUT
-N IPTVFORWARD
-N IPTVINPUT
-N LOG_DROP
-N LOG_REJECT
-N LOOPBACK
-N NEWNOTSYN
-N OUTGOINGFW
-N OVPNBLOCK
-N OVPNINPUT
-N P2PBLOCK
-N POLICYFWD
-N POLICYIN
-N POLICYOUT
-N PSCAN
-N REDFORWARD
-N REDINPUT
-N TOR_INPUT
-N UPNPFW
-N WIRELESSFORWARD
-N WIRELESSINPUT
-A INPUT -p tcp -j BADTCP
-A INPUT -j CUSTOMINPUT
-A INPUT -j P2PBLOCK
-A INPUT -j GUARDIAN
-A INPUT -i tun+ -j OVPNBLOCK
-A INPUT -j IPTVINPUT
-A INPUT -j ICMPINPUT
-A INPUT -j LOOPBACK
-A INPUT -j CONNTRACK
-A INPUT -i green0 -j DHCPGREENINPUT
-A INPUT -i blue0 -j DHCPBLUEINPUT
-A INPUT -j GEOIPBLOCK
-A INPUT -j IPSECINPUT
-A INPUT -j GUIINPUT
-A INPUT -m conntrack --ctstate NEW -j WIRELESSINPUT
-A INPUT -j OVPNINPUT
-A INPUT -j TOR_INPUT
-A INPUT -j INPUTFW
-A INPUT -j REDINPUT
-A INPUT -j POLICYIN
-A FORWARD -p tcp -j BADTCP
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -j CUSTOMFORWARD
-A FORWARD -j P2PBLOCK
-A FORWARD -j GUARDIAN
-A FORWARD -m policy --dir out --pol none -j IPSECBLOCK
-A FORWARD -i tun+ -j OVPNBLOCK
-A FORWARD -o tun+ -j OVPNBLOCK
-A FORWARD -j IPTVFORWARD
-A FORWARD -j LOOPBACK
-A FORWARD -j CONNTRACK
-A FORWARD -j GEOIPBLOCK
-A FORWARD -j IPSECFORWARD
-A FORWARD -m conntrack --ctstate NEW -j WIRELESSFORWARD
-A FORWARD -j FORWARDFW
-A FORWARD -m conntrack --ctstate NEW -j UPNPFW
-A FORWARD -j REDFORWARD
-A FORWARD -j POLICYFWD
-A OUTPUT -j CUSTOMOUTPUT
-A OUTPUT -j P2PBLOCK
-A OUTPUT -m policy --dir out --pol none -j IPSECBLOCK
-A OUTPUT -j LOOPBACK
-A OUTPUT -j CONNTRACK
-A OUTPUT -o green0 -j DHCPGREENOUTPUT
-A OUTPUT -o blue0 -j DHCPBLUEOUTPUT
-A OUTPUT -j IPSECOUTPUT
-A OUTPUT -j OUTGOINGFW
-A OUTPUT -j POLICYOUT
-A BADTCP -i lo -j RETURN
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j PSCAN
-A BADTCP -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j NEWNOTSYN
-A CONNTRACK -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A CONNTRACK -m conntrack --ctstate INVALID -j DROP
-A CONNTRACK -p icmp -m conntrack --ctstate RELATED -j ACCEPT
-A CONNTRACK -m conntrack --ctstate RELATED -m helper --helper sip -j ACCEPT
-A CONNTRACK -m conntrack --ctstate RELATED -m helper --helper h323 -j ACCEPT
-A CONNTRACK -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp -m tcp --dport 1024:65535 -j ACCEPT
-A CONNTRACK -m conntrack --ctstate RELATED -m helper --helper irc -j ACCEPT
-A DHCPBLUEINPUT -i blue0 -j DHCPINPUT
-A DHCPBLUEOUTPUT -o blue0 -j DHCPOUTPUT
-A DHCPGREENINPUT -i green0 -j DHCPINPUT
-A DHCPGREENOUTPUT -o green0 -j DHCPOUTPUT
-A DHCPINPUT -p udp -m udp --sport 68 --dport 67 -j ACCEPT
-A DHCPINPUT -p tcp -m tcp --sport 68 --dport 67 -j ACCEPT
-A DHCPOUTPUT -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A DHCPOUTPUT -p tcp -m tcp --sport 67 --dport 68 -j ACCEPT
-A FORWARDFW -d 192.168.1.1/32 -i red0 -p udp -m udp --dport 5060 -j ACCEPT
-A FORWARDFW -d 192.168.1.1/32 -i red0 -p tcp -m tcp --dport 5060 -j ACCEPT
-A FORWARDFW -d 192.168.1.1/32 -i red0 -p udp -m udp --dport 8000 -j ACCEPT
-A FORWARDFW -d 192.168.1.1/32 -i red0 -p udp -m udp --dport 8001 -j ACCEPT
-A FORWARDFW -d 192.168.1.1/32 -i red0 -p udp -m udp --dport 8002 -j ACCEPT
-A FORWARDFW -d 192.168.1.1/32 -i red0 -p udp -m udp --dport 8003 -j ACCEPT
-A FORWARDFW -d 192.168.1.1/32 -i red0 -p udp -m udp --dport 8004 -j ACCEPT
-A FORWARDFW -d 192.168.1.1/32 -i red0 -p udp -m udp --dport 8005 -j ACCEPT
-A GUIINPUT -i green0 -p tcp -m tcp --dport 444 -j ACCEPT
-A ICMPINPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUTFW -s 192.168.1.0/24 -d 192.168.1.251/32 -i green0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUTFW -s 192.168.1.0/24 -d 192.168.1.251/32 -i green0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUTFW -s 192.168.2.0/24 -d 192.168.2.250/32 -i blue0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUTFW -s 192.168.2.0/24 -d 192.168.2.250/32 -i blue0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUTFW -d 10.0.0.114/32 -p tcp -m tcp --dport 22 -m limit --limit 10/min --limit-burst 20 -j LOG --log-prefix "INPUTFW "
-A INPUTFW -d 10.0.0.114/32 -p tcp -m tcp --dport 22 -j DROP
-A LOG_DROP -m limit --limit 10/min -j LOG
-A LOG_DROP -j DROP
-A LOG_REJECT -m limit --limit 10/min -j LOG
-A LOG_REJECT -j REJECT --reject-with icmp-port-unreachable
-A LOOPBACK -i lo -j ACCEPT
-A LOOPBACK -o lo -j ACCEPT
-A LOOPBACK -s 127.0.0.0/8 -j DROP
-A LOOPBACK -d 127.0.0.0/8 -j DROP
-A NEWNOTSYN -m comment --comment DROP_NEWNOTSYN -j DROP
-A OVPNBLOCK -p icmp -m conntrack --ctstate RELATED -j RETURN
-A POLICYFWD -s 192.168.1.0/24 -i green0 -j ACCEPT
-A POLICYFWD -m policy --dir in --pol ipsec -j ACCEPT
-A POLICYFWD -i tun+ -j ACCEPT
-A POLICYFWD -s 192.168.2.0/24 -i blue0 -o red0 -j ACCEPT
-A POLICYFWD -s 192.168.3.0/24 -i orange0 -o red0 -j ACCEPT
-A POLICYFWD -m limit --limit 10/min -j LOG --log-prefix "DROP_FORWARD "
-A POLICYFWD -m comment --comment DROP_FORWARD -j DROP
-A POLICYIN -i green0 -j ACCEPT
-A POLICYIN -i blue0 -j ACCEPT
-A POLICYIN -m policy --dir in --pol ipsec -j ACCEPT
-A POLICYIN -i tun+ -j ACCEPT
-A POLICYIN -m limit --limit 10/min -j LOG --log-prefix "DROP_INPUT "
-A POLICYIN -m comment --comment DROP_INPUT -j DROP
-A POLICYOUT -j ACCEPT
-A POLICYOUT -m comment --comment DROP_OUTPUT -j DROP
-A PSCAN -p tcp -m limit --limit 10/min -m comment --comment "DROP_TCP PScan" -j LOG --log-prefix "DROP_TCP Scan "
-A PSCAN -p udp -m limit --limit 10/min -m comment --comment "DROP_UDP PScan" -j LOG --log-prefix "DROP_UDP Scan "
-A PSCAN -p icmp -m limit --limit 10/min -m comment --comment "DROP_ICMP PScan" -j LOG --log-prefix "DROP_ICMP Scan "
-A PSCAN -f -m limit --limit 10/min -m comment --comment "DROP_FRAG PScan" -j LOG --log-prefix "DROP_FRAG Scan "
-A PSCAN -m comment --comment DROP_PScan -j DROP
-A REDFORWARD -i orange0 -o red0 -j ACCEPT
-A REDINPUT -i red0 -p tcp -m tcp --sport 67 --dport 68 -j ACCEPT
-A REDINPUT -i red0 -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A WIRELESSFORWARD -s 192.168.2.1/32 -i blue0 -m mac --mac-source XX:XX:XX:XX:XX:XX -j RETURN
-A WIRELESSFORWARD -i blue0 -j LOG --log-prefix DROP_Wirelessforward
-A WIRELESSFORWARD -i blue0 -m comment --comment DROP_Wirelessforward -j DROP
-A WIRELESSINPUT -s 192.168.2.1/32 -i blue0 -m mac --mac-source XX:XX:XX:XX:XX:XX -j RETURN
-A WIRELESSINPUT -i blue0 -j LOG --log-prefix DROP_Wirelessinput
-A WIRELESSINPUT -i blue0 -m comment --comment DROP_Wirelessinput -j DROP

$ sudo 경로 -n:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.157.1.5      128.0.0.0       UG    0      0        0 tun0
0.0.0.0         10.0.0.1        0.0.0.0         UG    204    0        0 red0
10.0.0.0        0.0.0.0         255.255.255.0   U     204    0        0 red0
10.157.1.1      10.157.1.5      255.255.255.255 UGH   0      0        0 tun0
10.157.1.5      0.0.0.0         255.255.255.255 UH    0      0        0 tun0
129.82.205.12   10.0.0.1        255.255.255.255 UGH   0      0        0 red0
128.0.0.0       10.157.1.5      128.0.0.0       UG    0      0        0 tun0
192.168.1.0      0.0.0.0         255.255.255.0   U     0      0        0 green0
192.168.2.0      0.0.0.0         255.255.255.0   U     0      0        0 blue0

답변1

귀하의 규칙은 귀하가 설명하는 시나리오에 적합하지 않습니다.

CONNTRACK체인이 VPN 인바운드 패킷을 처리하므로 VPN이 제대로 작동한다는 데 동의합니다 .

그러나 VPN을 통해 VoIP를 실행하려면 red0SIP 트래픽을 처리하기 위한 규칙이 전혀 필요하지 않습니다.

공용 IP 주소에 대한 등록되지 않은 SIP 호출을 수락하려는 것 같지만 트래픽이 VPN을 통해 나가고 있습니다. 아웃바운드 IP 주소가 통화 대상 주소와 일치하지 않기 때문에 발신자에게 혼란을 줄 수 있습니다.

또한 SIP 클라이언트를 실행하는 일반적인 방법으로 엔드포인트/프록시에 등록하므로 일반 규칙 이외의 규칙은 필요하지 않습니다.관련 동의트래픽이 올바르게 흐르도록 합니다. (Twinkle에서 공용 IP 주소를 선언해야 할 수도 있습니다. 이는 STUN 또는 ICE를 사용하여 찾는 기능에 따라 다릅니다.)

이때는 일시적으로 방화벽을 끄고 INPUT, OUTPUT, FORWARD 체인 정책을 ACCEPT로 재설정한 후 작동하는지 확인해 보시기를 강력히 권해 드립니다. 그런 다음 방화벽 규칙 적용을 시작할 수 있습니다.

답변2

라우팅 테이블에 VPN이 리디렉션으로 설정되어 있음이 표시됩니다.모두VPN을 통한 트래픽. 이로 인해 여러 가지 방법으로 문제가 발생할 수 있습니다.

  • VPN을 시작하기 전에 SIP 서비스를 등록한 경우 VPN을 시작하면 SIP 공급자에 관한 한 SIP 트래픽은 다른 발신자로부터 온 것처럼 보입니다. 이 문제를 방지하려면 VPN이 실행 중일 때만 SIP 등록이 발생하는지 확인하십시오.
  • VPN의 다른 쪽 끝이 SIP 트래픽을 제대로 NAT하지 않으면 작동하지 않을 수 있습니다.
  • 이 방법은 SIP 공급자에 대한 경로가 더 길기 때문에 SIP 트래픽이 지연됩니다. 이로 인해 SIP 연결에 문제가 발생할 수도 있습니다.

이 마지막 부분은 SIP 연결에만 적용되는 것이 아닙니다. 예를 들어 게임을 하거나 Netflix를 시청하거나 고대역폭 및/또는 짧은 대기 시간의 이점을 누릴 수 있는 모든 작업을 수행하려는 경우 이 설정을 사용하세요.~ 할 것이다문제를 일으키는. 또한 VPN에 대한 엔드포인트를 제공하는 사람은 누구든지 읽을 수 있습니다.모두귀하의 (암호화되지 않은) 트래픽. 꼭 이 일을 해야 하는지 스스로에게 물어보세요...

관련 정보