Ich habe versucht, Turnserver zu verwenden, den ich verwenden wollte, aber nicht verwendet habe. Notieren Sie sich dies.
Sakura Cloud CentOS Release 6.5 (endgültig) Server coturn
In meiner Umgebung habe ich die Quelle in *** / user / local / src / *** vorbereitet. Als ich *** zum ersten Mal konfiguriert habe, wurde mir gesagt, dass auch *** libevent2 *** erforderlich ist, also habe ich es von hier erhalten.
> pwd;ls -F
/usr/local/src
libevent-2.0.21-stable/ turnserver-4.3.1.2/
Zuerst mit *** libevent2 ***
./configure
make
make install
*** coturn *** auch
./configure
make
make install
Wenn Sie bauen, ohne etwas anzugeben,
> which turnserver
/usr/local/bin/turnserver
Eine ausführbare Datei wird in *** / usr / local / bin *** erstellt. Die *** conf *** -Datei wird in *** / usr / local / etc *** erstellt. Sie können eine Vorlage erstellen, kopieren und ändern.
> pwd;ls
/usr/local/etc
turnserver.conf turnserver.conf.default
Grundsätzlich ist die Standardeinstellung, aber das bearbeitete Element ist
#Globale IP
listening-ip=XXX.XXX.XXX.XXX
#localhost-Spezifikation
relay-ip=127.0.0.1
min-port=49152
max-port=65535
verbose #Ich möchte die Details des Protokolls sehen, also brechen Sie es ab
no-tls
no-dtls
stun-only
Geben Sie vorerst nur dies an
# turnserver
0: log file opened: /var/log/turn_3786_2014-12-09.log
0:
RFC 3489/5389/5766/5780/6062/6156 STUN/TURN Server
Version Coturn-4.3.1.2 'Tolomei'
0:
Max number of open files/sockets allowed for this process: 4096
0:
Due to the open files/sockets limitation,
max supported number of TURN Sessions possible is: 2000 (approximately)
0:
==== Show him the instruments, Practical Frost: ====
0: TLS supported
0: DTLS supported
0: AEAD supported
0: SQLite is not supported
0: Redis is not supported
0: PostgreSQL is not supported
0: MySQL supported
0: MongoDB is not supported
0: OpenSSL compile-time version 0x1000105f: fresh enough
0: Default Net Engine version: 3 (UDP thread per CPU core)
=====================================================
0: Config file found: /usr/local/etc/turnserver.conf
0: Listener address to use: XXX.XXX.XXX.XXX
0: Relay address to use: 127.0.0.1
0: Config file found: /usr/local/etc/turnserver.conf
0: Domain name:
0: Default realm:
0: pid file created: /var/run/turnserver.pid
0: IO method (main listener thread): epoll (with changelist)
0: WARNING: I cannot support STUN CHANGE_REQUEST functionality because only one IP address is provided
0: Wait for relay ports initialization...
0: relay 127.0.0.1 initialization...
0: relay 127.0.0.1 initialization done
0: Relay ports initialization done
0: IO method (general relay thread): epoll (with changelist)
0: turn server id=0 created
0: IPv4. TCP listener opened on : XXX.XXX.XXX.XXX:3478
0: IPv4. UDP listener opened on: XXX.XXX.XXX.XXX:3478
0: Total UDP servers: 0
0: Total General servers: 1
0: IO method (cli thread): epoll (with changelist)
0: IPv4. CLI listener opened on : 127.0.0.1:5766
0: IO method (auth thread): epoll (with changelist)
> netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 XXX.XXX.XXX.XXX:stun *:* LISTEN
udp 0 0 XXX.XXX.XXX.XXX:stun *:*
Der Server läuft auf Stun (3478) mit TCP und UDP.
Diesmal ist es nur eine Funktionsprüfung, also habe ich den Client von hier mitgebracht, aber betäubt Der Header war etwas anders, also habe ich ihn umgeschrieben.
# default configuration
host = argv[1] #"Globale IP"
port = 3478
local_ip = 'Meine lokale IP(192.X.X.X?)'
local_port = 7878
## first bind
def stun_binding_first(sock):
print '\nSTUN binding request ...'
# header
header = struct.pack('!H',STUN_method['STUN_METHOD_BINDING']) # binding req
header += struct.pack('!H',0x00) # length
header += struct.pack('!l',STUN_MAGIC_COOKIE) # magic cookie
header += struct.pack('!12s',genTranID()) # trans ID
# body
body = struct.pack('!H',0x8022) # software
body += struct.pack('!h',0x0014) # length
body += struct.pack('!20s','PY STUN CLIENT 0.1')#value
# msg
send_data = header #+ body # TODO
print 'Send data ...'
r = sock.sendto(send_data,(host,port))
print 'size=',r
print 'Recv data ...'
buf,address = sock.recvfrom(1024)
print 'size=',len(buf)
print 'data: ',buf
print 'from: ',address
(header,attr) = recv_resp(buf)
# TODD: parse: realm, nonce
print ''
return (header,attr)
Überprüfen Sie damit den Betrieb
#Klient
$>python stuncli.py XXX.XXX.XXX.XXX
STUN(RFC5389) client demo by Chris <nodexy@gmail>
Connect to server : XXX.XXX.XXX.XXX 3478
Bind local ip:port : 192.xxx.xxx.xxx 7878
STUN binding request ...
Send data ...
size= 20
Recv data ...
size= 84
data:#Ausgelassen
????ɀ"Coturn-4.3.1.2 'Tolomei'?r??+
from: ('XXX.XXX.XXX.XXX', 3478)
>>header:
0x101 64 2112a442 #Ausgelassen
>>attrs:
32 XXX.XXX.XXX.XXX : 7878 (XOR= #Ausgelassen) #Dies sollte die globale IP nach NAT sein
>>> Success! XOR-MAPPED-ADDRESS= XXX.XXX.XXX.XXX:7878
END!
$>
#Server
0: Total UDP servers: 0
0: Total General servers: 1
0: IO method (cli thread): epoll (with changelist)
0: IPv4. CLI listener opened on : 127.0.0.1:5766
0: IO method (auth thread): epoll (with changelist)
730: handle_udp_packet: New UDP endpoint: local addr XXX.XXX.XXX.XXX:3478, remote addr XXX.XXX.XXX.XXX:7878
1
730: session 000000000000000001: realm <> user <>: incoming packet BINDING processed, success
733: session 000000000000000001: closed (2nd stage), user <> realm <> origin <>, local XXX.XXX.XXX.XXX:3478, remote XXX.XXX.XXX.XXX:7878, reason: allocation watchdog determined stale session state
Der Server hat eine Zeitüberschreitung, weil er keine zweite Anforderung erhalten hat. Ich konnte dem Client jedoch bestätigen, dass die IP (wahrscheinlich) vom Server zurückgegeben wurde, nachdem er NAT durchlaufen hatte. Ich weiß noch nicht viel darüber, also habe ich nichts Aufwändiges getan. Ich frage mich, ob es vorerst funktioniert hat. Abhängig von der Umgebung wird möglicherweise nichts vom Server zurückgegeben. Ich habe es aufgeschrieben, weil es vorerst funktioniert hat.
Recommended Posts