prinzrainer
Journeyman
Warning highly technical post!
Hi guys mga OpenVPN users sawa na ba kayo dahil hindi working yung config nyo?? Well ito na yung solution.
Related Post: https://phcorner.org/threads/700148/#post-11925141
Simulan natin muna kung pano ba talaga na bbypass natin yung ISP para maka free net tayo?
Gumagana ito sa pamamagitan ng pag sesend ng fake server name during TLS connection, so akala ni ISP nag aaccess tayo ng website na yun? (Application Level yung filtering ng ISP dahil hirap silang e filter yung packets network or transport level)
Ano yung bago sa method na to?
Yung iba na nakikita ko full TLS yung implementation ng server nila. Ito transparent forwarding lang with a twist during initial message.
Ano yung call flow ng message at ano yung twist?
Una kelangan natin makita yung traces kung wala tayong load:

Kita nyo yung pula pula? Ibig sabihin nun nag force disconnect yung ISP nyo sa socket connection na yun.
Napansin nyo din ba na nangyayari lang yun after ng Client Hello?
Ito ay dahil di tangap ni ISP yung server name na inaaccess ng client.
Ito din yung pinag dadamot ng iba na ibigay sa inyo, aka SNI or Server Name Indication
So ano nga yung call flow at ano yung twist?
Yung call flow ay elementary basic lang

Yung twist dito is tranparent forwarding lang yung ginagamit natin, nag inject lang tayo ng Fake TLS Client Hello na message after nag establish yung TCP connection ng LocalForwardingServer at RemoteForwardingServer.
Bat ang gulo?!
Chill lang! Elementary basic lang din yung implementation nito.
LocalForwardingServer.py
RemoteForwardingServer.py
Wow sobrang dali lang pala talaga!!
Diba?!
So ano yung hitsura ng client config?
Ganito lang:

gagawin mo lang na remote yung LocalForwardingServer's IP
ort
TESTS:

OpenVPN Server Hosted on AWS

Hi guys mga OpenVPN users sawa na ba kayo dahil hindi working yung config nyo?? Well ito na yung solution.
Related Post: https://phcorner.org/threads/700148/#post-11925141
Simulan natin muna kung pano ba talaga na bbypass natin yung ISP para maka free net tayo?
Gumagana ito sa pamamagitan ng pag sesend ng fake server name during TLS connection, so akala ni ISP nag aaccess tayo ng website na yun? (Application Level yung filtering ng ISP dahil hirap silang e filter yung packets network or transport level)
Ano yung bago sa method na to?
Yung iba na nakikita ko full TLS yung implementation ng server nila. Ito transparent forwarding lang with a twist during initial message.
Ano yung call flow ng message at ano yung twist?
Una kelangan natin makita yung traces kung wala tayong load:

Kita nyo yung pula pula? Ibig sabihin nun nag force disconnect yung ISP nyo sa socket connection na yun.
Napansin nyo din ba na nangyayari lang yun after ng Client Hello?
Ito ay dahil di tangap ni ISP yung server name na inaaccess ng client.
Ito din yung pinag dadamot ng iba na ibigay sa inyo, aka SNI or Server Name Indication
So ano nga yung call flow at ano yung twist?
Yung call flow ay elementary basic lang

Yung twist dito is tranparent forwarding lang yung ginagamit natin, nag inject lang tayo ng Fake TLS Client Hello na message after nag establish yung TCP connection ng LocalForwardingServer at RemoteForwardingServer.
Bat ang gulo?!
Chill lang! Elementary basic lang din yung implementation nito.
LocalForwardingServer.py
Python:
#!/usr/bin/python
import socket
import time
import threading
# Adress kung saan naka run yung LocalForwardingServer
# Usually mag rurun to same machine ng OpenVPN Client
# So pweding 127.0.0.1 lang
LOCAL_SERVER_ADDRESS = ('XXX.XXX.XXX.XXX', 443)
# Address kung saan naka run yung RemoteForwardingServer
# Usually mag rurun to same machine ng OpenVPN Server
# Dapat di naka block sa firewall ng server yung 443
REMOTE_SERVER_ADDRESS = ("XXX.XXX.XXX.XXX", 443)
tosock= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
fromlisten = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
fromlisten.bind(LOCAL_SERVER_ADDRESS)
fromlisten.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
fromlisten.listen(1)
def downlink(fromsock, tosock):
print "downlink started!"
while True:
data = tosock.recv(1024*64)
fromsock.send(data)
def uplink(fromsock, tosock):
print "uplink started!"
while True:
data = fromsock.recv(1024*64)
tosock.send(data)
while True:
print "waiting for local connection.."
fromsock,addr = fromlisten.accept()
tosock.connect(REMOTE_SERVER_ADDRESS)
tosock.send("16030100dd010000d90303524408300450b48f90ead85d002384a64b6c1dc570ffd1e0aca36728f3a3fff7000042c030c02cc028c024c014c00ac032c02ec02ac026c00fc005009d003d00350084c02fc02bc027c023c013c009c031c02dc029c025c00ec004009c003c002f004100ff0100006e00000015001300001070672e63646e2e76696265722e636f6d000b000403000102000a001c001a00170019001c001b0018001a0016000e000d000b000c0009000a00230000000d0020001e060106020603050105020503040104020403030103020303020102020203000f000101".decode("hex"))
print "endpoints connected!"
t1 = threading.Thread(target=uplink, args=(fromsock, tosock,))
t2 = threading.Thread(target=downlink, args=(fromsock, tosock,))
t1.start()
t2.start()
t1.join()
t2.join()
RemoteForwardingServer.py
Python:
#!/usr/bin/python
import socket
import time
import threading
# Binding address ng RemoteForwardingServer
FAKESSL_SERVER_ADDRESS = ('XXX.XXX.XXX.XXX', 443)
# Address ng OpenVPN Server relative sa RemoteForwardingServer
VPN_SERVER_ADDRESS = ("localhost", 1194)
tosock= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
fromlisten = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
fromlisten.bind(FAKESSL_SERVER_ADDRESS)
fromlisten.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
fromlisten.listen(1)
def downlink(fromsock, tosock):
print fromsock
print tosock
print "downlink started!"
while True:
data = tosock.recv(1024*64)
fromsock.send(data)
def uplink(fromsock, tosock):
print fromsock
print tosock
print "uplink started!"
print "discarding hello!"
fromsock.recv(1024*64)
while True:
data = fromsock.recv(1024*64)
tosock.send(data)
while True:
print "waiting for local connection.."
fromsock,addr = fromlisten.accept()
tosock.connect(VPN_SERVER_ADDRESS)
print "endpoints connected!"
t1 = threading.Thread(target=uplink, args=(fromsock, tosock,))
t2 = threading.Thread(target=downlink, args=(fromsock, tosock,))
t1.start()
t2.start()
t1.join()
t2.join()
Wow sobrang dali lang pala talaga!!
Diba?!
So ano yung hitsura ng client config?
Ganito lang:

gagawin mo lang na remote yung LocalForwardingServer's IP
ortTESTS:

OpenVPN Server Hosted on AWS


sana po may config na