Как сделать proxy server ?

GoGLiKK

Гений мысли
Проверенный
Сообщения
1 226
Розыгрыши
0
Репутация
1 920
Реакции
1 180
Баллы
1 808
Здравствуйте,
Интересует как сделать прокси сервер. у меня щас сервер в россии но пинг с моей страны очень высокий 250+ хочу взять например в германии и конектит через него на сервер игроков. кто подскажет как мне это сделать ?
 
Как вариант, вырезать отсюда прокси-слайдер. Тут он есть.
L2scripts_IO_24Protocol_infinite odyssey
такая реализация у меня есть. я спрашиваю именно техническую часть как сделать сам прокси сервер.

есть ведь хостинги которые продают защиту от ддоса которая проксирует айпи аддресс вот как мне сделать так чтоб когда я иду например к серверу с ip 2.2.2.2:7777 он отправил меня на 3.3.3.3:7777

 
Последнее редактирование модератором:
Обращайтесь. Посоветую помогу проконсультирую, недорого.
 
По мимо всего прочего, надо как то передавать ип клиента а не машины в игру)
 
Я ничего не понимаю.
Как тот прокси может не работать как надо? К примеру ты взял так называемый канал с защитой в России, а один где то за границей.
В той системе прописываешь один адрес России а второй скажем Америки. В патче указываешь какой канал с какой страны и игроки будут сами выбирать.
А если как выше написали ты хочешь что бы через виртуальный сервер все это проходило, то извини, на этом мои знания заканчиваются(
 
Что то типо такого? Ловим пакеты от клиента на одной тачке, и прокидываем их на другую.

Забыл на первой дописать, там где стрелочка это куда клиента гонять
 
Последнее редактирование модератором:
Спасибо всем думаю инфа поможет.
 
О, можно в личку сорсы поглядеть для общего развития?
 
О, можно в личку сорсы поглядеть для общего развития?
Сори, это пакетник для Блесса, пилю в привате) Могу объяснить как сделать такой по аналогии

Вырезал все секретное, чекни личку)
О, можно в личку сорсы поглядеть для общего развития?
 
Последнее редактирование модератором:
ssh тунель не?
ну или

Код:
package main
import (
"bytes"
"encoding/hex"
"flag"
"fmt"
"io"
"log"
"net"
)
var localAddr *string = flag.String("l", "localhost:9999", "local address")
var remoteAddr *string = flag.String("r", "localhost:80", "remote address")
func proxyConn(conn *net.TCPConn) {
rAddr, err := net.ResolveTCPAddr("tcp", *remoteAddr)
if err != nil {
panic(err)
}
rConn, err := net.DialTCP("tcp", nil, rAddr)
if err != nil {
panic(err)
}
defer rConn.Close()
buf := &bytes.Buffer{}
for {
data := make([]byte, 256)
n, err := conn.Read(data)
if err != nil {
panic(err)
}
buf.Write(data[:n])
if data[0] == 13 && data[1] == 10 {
break
}
}
if _, err := rConn.Write(buf.Bytes()); err != nil {
panic(err)
}
log.Printf("sent:\n%v", hex.Dump(buf.Bytes()))
data := make([]byte, 1024)
n, err := rConn.Read(data)
if err != nil {
if err != io.EOF {
panic(err)
} else {
log.Printf("received err: %v", err)
}
}
log.Printf("received:\n%v", hex.Dump(data[:n]))
}
func handleConn(in <-chan *net.TCPConn, out chan<- *net.TCPConn) {
for conn := range in {
proxyConn(conn)
out <- conn
}
}
func closeConn(in <-chan *net.TCPConn) {
for conn := range in {
conn.Close()
}
}
func main() {
flag.Parse()
fmt.Printf("Listening: %v\nProxying: %v\n\n", *localAddr, *remoteAddr)
addr, err := net.ResolveTCPAddr("tcp", *localAddr)
if err != nil {
panic(err)
}
listener, err := net.ListenTCP("tcp", addr)
if err != nil {
panic(err)
}
pending, complete := make(chan *net.TCPConn), make(chan *net.TCPConn)
for i := 0; i < 5; i++ {
go handleConn(pending, complete)
}
go closeConn(complete)
for {
conn, err := listener.AcceptTCP()
if err != nil {
panic(err)
}
pending <- conn
}
}
 
Последнее редактирование модератором:
при передачи препост роутингом аут сервер будет получать айпи прокси) для передачи оригинального айпи юзера надо подымать gre/ipip
 
да помню было такое у меня раньше когда пытался сделать. спасибо что напомнил про это xD