J'ai essayé d'utiliser Turnerserver, que je voulais utiliser mais que je n'ai pas utilisé, alors notez-le.
Sakura Cloud CentOS version 6.5 (finale) Serveur coturn
Dans mon environnement, j'ai préparé la source dans *** / user / local / src / ***. Quand j'ai fait *** configure *** pour la première fois, on m'a dit que *** libevent2 *** était également requis, donc je l'ai obtenu de ici.
> pwd;ls -F
/usr/local/src
libevent-2.0.21-stable/ turnserver-4.3.1.2/
D'abord avec *** libevent2 ***
./configure
make
make install
*** coturn *** aussi
./configure
make
make install
Si vous construisez sans rien spécifier,
> which turnserver
/usr/local/bin/turnserver
Un fichier exécutable est créé dans *** / usr / local / bin ***. Le fichier *** conf *** sera créé dans *** / usr / local / etc ***. Vous pouvez créer un modèle, le copier et le modifier.
> pwd;ls
/usr/local/etc
turnserver.conf turnserver.conf.default
Fondamentalement, la valeur par défaut, mais l'élément modifié est
#IP globale
listening-ip=XXX.XXX.XXX.XXX
#spécification localhost
relay-ip=127.0.0.1
min-port=49152
max-port=65535
verbose #Je veux voir les détails du journal, alors annulez-le
no-tls
no-dtls
stun-only
Pour le moment, spécifiez uniquement ceci
# 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 *:*
Le serveur fonctionne sur stun (3478) avec tcp et udp.
Cette fois, c'est juste une vérification de fonctionnement, j'ai donc amené le client de ici, mais étourdi L'en-tête était un peu différent, alors je l'ai réécrit.
# default configuration
host = argv[1] #"IP globale"
port = 3478
local_ip = 'Mon adresse IP locale(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)
Vérifiez le fonctionnement avec ce
#client
$>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:#Omis
????ɀ"Coturn-4.3.1.2 'Tolomei'?r??+
from: ('XXX.XXX.XXX.XXX', 3478)
>>header:
0x101 64 2112a442 #Omis
>>attrs:
32 XXX.XXX.XXX.XXX : 7878 (XOR= #Omis) #Cela devrait être l'adresse IP globale après NAT
>>> Success! XOR-MAPPED-ADDRESS= XXX.XXX.XXX.XXX:7878
END!
$>
#serveur
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
Le serveur a expiré car il n'a pas reçu de deuxième demande. Cependant, j'ai pu confirmer au client que l'adresse IP était (probablement) renvoyée par le serveur après avoir traversé NAT. Je n'en sais pas encore grand-chose, donc je n'ai rien fait de précis. Je me demande si cela a fonctionné pour le moment. Selon l'environnement, rien ne peut être renvoyé par le serveur. Je l'ai noté parce que cela fonctionnait pour le moment.
Recommended Posts