Делаем зеркало сервера на udp-proxy |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Делаем зеркало сервера на udp-proxy |
Fire |
7.7.2015, 22:14
Сообщение
|
|
Собственно, для линей.
Качаем архив, извлекаем бинарник: udp.zip ( 3,18 килобайт ) Кол-во скачиваний: 281 Закачиваем на вдс\сервер, делаем Код chmod +x udp Запускаем: Код ./udp LOCAL_IP LOCAL_PORT DST_IP DST_PORT Пример: Код ./udp 77.220.187.255 27015 91.218.255.255 27030 Код quakestat -hls 77.220.187.255 ADDRESS PLAYERS MAP RESPONSE TIME NAME 77.220.187.255 0/10 cs_747 2 / 0 cstrike Новый сервер Как на это все отреагируют бусты, не знаю. Из минусов - на сервере игроки будут с IP Proxy Из плюсов - можно сделать зеркало даже для сервера на хостинге. Исходники: Скрытый текст Код /* http://www.brokestream.com/udp_redirect.html Build: gcc -o udp_redirect udp_redirect.c udp_redirect.c Version 2013-05-30 Copyright (C) 2007 Ivan Tikhonov 2015 added multi-hosts */ #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> int bindsocket( char* ip, int port ); int main( int argc, char* argv[] ); int bindsocket( char* ip, int port ) { int fd; struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr( ip ); addr.sin_port = htons( port ); fd = socket( PF_INET, SOCK_DGRAM, IPPROTO_IP ); if( -1 == bind( fd, (struct sockaddr*)&addr, sizeof( addr ) ) ) { fprintf( stderr, "Cannot bind address (%s:%d)\n", ip, port ); exit( 1 ); } return fd; } int main( int argc, char* argv[] ) { int i, listen, output; char *inip, *inpt, *srcip, *dstip, *dstpt; struct sockaddr_in src; struct sockaddr_in dst; struct sockaddr_in ret; if( 3 != argc && 5 != argc && 6 != argc ) { fprintf( stderr, "Usage: %s <listen-ip> <listen-port> [[source-ip] <destination-ip> <destination-port>]\n", argv[ 0 ] ); exit( 1 ); } i = 1; inip = argv[ i++ ]; /* 1 */ inpt = argv[ i++ ]; /* 2 */ if( 6 == argc ) srcip = argv[ i++ ]; /* 3 */ if( 3 != argc ) { dstip = argv[ i++ ]; /* 3 or 4 */ dstpt = argv[ i++ ]; /* 4 or 5 */ } listen = bindsocket( inip, atoi( inpt ) ); if( 6 == argc ) { output = bindsocket( srcip, atoi( inpt ) ); } else { output = listen; } if( 3 != argc ) { dst.sin_family = AF_INET; dst.sin_addr.s_addr = inet_addr( dstip ); dst.sin_port = htons( atoi( dstpt ) ); } ret.sin_addr.s_addr = 0; while( 1 ) { char buffer[65535]; unsigned int size = sizeof( src ); int length = recvfrom( listen, buffer, sizeof( buffer ), 0, (struct sockaddr*)&src, &size ); if( length <= 0 ) continue; if( 3 == argc ) { sendto( listen, buffer, length, 0, (struct sockaddr*)&src, size ); } else if( ( src.sin_addr.s_addr == dst.sin_addr.s_addr ) && ( src.sin_port == dst.sin_port ) ) { if( ret.sin_addr.s_addr ) then return them to the original sender */ sendto( output, buffer, length, 0, (struct sockaddr*)&ret, sizeof( ret ) ); } else { sendto( output, buffer, length, 0, (struct sockaddr*)&dst, sizeof( dst ) ); ret = src; } } } |
Поблагодарили 21 раз
|
|
Safety1st |
7.7.2015, 22:20
Сообщение
|
Цитата Из минусов - на сервере игроки будут с IP Proxy Огромный минус Ждём логическое продолжение: вторую статью |
|
|
|
ETO_BYLO_LETOM |
7.7.2015, 22:46
Сообщение
|
|
Нормально отреагируют , метод без потери реального ип игрока ещё бы )
😄 MasterServer.su прозрачнее чем твои окна дома |
|
|
Tet |
7.7.2015, 22:48
Сообщение
|
|
|
|
|
Fire |
7.7.2015, 22:49
Сообщение
|
|
Попробую подумать в сторону "прозрачного" прокси, может что-то простое придумаю.
Автору - зачет. Ради приличия, все-же, замечу, что автор софтины не я, я просто немного дополнил код. |
Поблагодарили 2 раз
|
|
tobin |
7.7.2015, 22:51
Сообщение
|
+ в карму
|
|
|
|
Safety1st |
7.7.2015, 23:00
Сообщение
|
|
|
ykpon |
7.7.2015, 23:08
Сообщение
|
|
|
Поблагодарили 2 раз
|
|
Tet |
7.7.2015, 23:14
Сообщение
|
|
|
|
|
mazdan |
7.7.2015, 23:27
Сообщение
|
|
Не удалось ссылку на сообщение скопировать
не знаю насчет uproxy, очень сомневаюсь что тут софтовое решение поможет, к тому же, uproxy - только для UDP. CLIENT (Server B): /sbin/iptunnel add tun0 mode gre remote AAA.AAA.AAA.AAA local BBB.BBB.BBB.BBB ttl 225 /sbin/ifconfig tun0 10.0.0.2/24 /sbin/ifconfig tun0 up /sbin/ifconfig tun0 pointopoint 10.0.0.1 /sbin/ifconfig tun0 multicast echo "100 table0" >> /etc/iproute2/rt_tables /sbin/ip route add 10.0.0.0/24 dev tun0 src 10.0.0.2 table table0 /sbin/ip route add table table0 default via 10.0.0.1 dev tun0 /sbin/ip rule add from 10.0.0.2 table table0 /sbin/ip rule add fwmark 2 table table0 /sbin/iptables -t nat -A PREROUTING -d 10.0.0.2 -j CONNMARK --set-mark 2 /sbin/iptables -t nat -A PREROUTING -d 10.0.0.2 -j DNAT --to-destination BBB.BBB.BBB.BBB /sbin/iptables -t mangle -A OUTPUT -s BBB.BBB.BBB.BBB -j CONNMARK --restore-mark SERVER (Server A) /sbin/iptunnel add tun0 mode gre remote BBB.BBB.BBB.BBB local AAA.AAA.AAA.AAA ttl 225 /sbin/ifconfig tun0 10.0.0.1/24 /sbin/ifconfig tun0 up /sbin/ifconfig tun0 pointopoint 10.0.0.2 /sbin/ifconfig tun0 multicast /sbin/iptables -t nat -A PREROUTING -d AAA.AAA.AAA.AAA -j DNAT --to-destination 10.0.0.2 Где AAA.AAA.AAA.AAA - внешний IP сервера А (этот IP будет использован для подключения и проксирования на сервер B) Где BBB.BBB.BBB.BBB - внешний IP сервера B (на котором, например, крутится игровой сервер на сервере B) Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
|
|
|
Fire |
7.7.2015, 23:38
Сообщение
|
|
Не удалось ссылку на сообщение скопировать Ну это скорее для тех, кто держит основной сервер на хостинге, там тебе туннель никто не сделает. |
|
|
mazdan |
7.7.2015, 23:50
Сообщение
|
|
Fire, да, это понятно, просто чтобы та полезная информация не пропала. Я просто до конца в итоге так и не доделал.
С проксей можно, конечно, пробовать айпиху выцепить реальную докинув информацию в какой-то примечательный пакет, который через прокси летит и на сервере считать (ну у меня была такая мысль) если суметь докинуть, то думаю и считать получится в итоге. Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
|
|
|
ykpon |
8.7.2015, 0:40
Сообщение
|
|
|
|
|
Tet |
8.7.2015, 0:53
Сообщение
|
|
Почему объединили темы "проксируем " и вторую часть статьи Fire в одну? Потерялся смысл.
Модераторы, посмотрите...
Отредактировал: Tet, - 8.7.2015, 0:54
|
|
|
ykpon |
8.7.2015, 1:01
Сообщение
|
|
|
Поблагодарили 1 раз
|
|
kasIIep |
8.7.2015, 5:22
Сообщение
|
В чем соль зеркала? Как это повлияет на пинг?
|
|
|
|
georgeml |
8.7.2015, 5:46
Сообщение
|
|
|
mazdan |
8.7.2015, 10:16
Сообщение
|
|
у меня по этой инструкции наполовину заработало ) но потом за ненадобностью не доделал.
Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
|
|
|
ykpon |
8.7.2015, 11:16
Сообщение
|
|
|
|
|
mazdan |
8.7.2015, 11:20
Сообщение
|
|
ykpon, пакет пролетал через прокси до целевого сервера, но там уже (на целевом) где-то терялся.
Если отправлял напрямую с прокси на целевой сервер, то сервер отвечал успешно. Вероятно что-то в iptables резало ) Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
|
|
|