mirror of https://github.com/oxen-io/lokinet
Merge pull request #1272 from majestrate/exit-nodes-2020-05-16
exit traffic via snappspull/1295/head
commit
45cda241f0
@ -0,0 +1,57 @@
|
||||
#
|
||||
# Find the JEMALLOC client includes and library
|
||||
#
|
||||
|
||||
# This module defines
|
||||
# JEMALLOC_INCLUDE_DIR, where to find jemalloc.h
|
||||
# JEMALLOC_LIBRARIES, the libraries to link against
|
||||
# JEMALLOC_FOUND, if false, you cannot build anything that requires JEMALLOC
|
||||
|
||||
# also defined, but not for general use are
|
||||
# JEMALLOC_LIBRARY, where to find the JEMALLOC library.
|
||||
|
||||
set( JEMALLOC_FOUND 0 )
|
||||
|
||||
if ( UNIX )
|
||||
FIND_PATH( JEMALLOC_INCLUDE_DIR
|
||||
NAMES
|
||||
jemalloc/jemalloc.h
|
||||
PATHS
|
||||
/usr/include
|
||||
/usr/include/jemalloc
|
||||
/usr/local/include
|
||||
/usr/local/include/jemalloc
|
||||
$ENV{JEMALLOC_ROOT}
|
||||
$ENV{JEMALLOC_ROOT}/include
|
||||
DOC
|
||||
"Specify include-directories that might contain jemalloc.h here."
|
||||
)
|
||||
FIND_LIBRARY( JEMALLOC_LIBRARY
|
||||
NAMES
|
||||
jemalloc libjemalloc JEMALLOC
|
||||
PATHS
|
||||
/usr/lib
|
||||
/usr/lib/jemalloc
|
||||
/usr/local/lib
|
||||
/usr/local/lib/jemalloc
|
||||
/usr/local/jemalloc/lib
|
||||
$ENV{JEMALLOC_ROOT}/lib
|
||||
$ENV{JEMALLOC_ROOT}
|
||||
DOC "Specify library-locations that might contain the jemalloc library here."
|
||||
)
|
||||
|
||||
if ( JEMALLOC_LIBRARY )
|
||||
if ( JEMALLOC_INCLUDE_DIR )
|
||||
set( JEMALLOC_FOUND 1 )
|
||||
message( STATUS "Found JEMALLOC library: ${JEMALLOC_LIBRARY}")
|
||||
message( STATUS "Found JEMALLOC headers: ${JEMALLOC_INCLUDE_DIR}")
|
||||
else ( JEMALLOC_INCLUDE_DIR )
|
||||
message(FATAL_ERROR "Could not find jemalloc headers! Please install jemalloc libraries and headers")
|
||||
endif ( JEMALLOC_INCLUDE_DIR )
|
||||
endif ( JEMALLOC_LIBRARY )
|
||||
add_library(jemalloc SHARED IMPORTED)
|
||||
set_target_properties(jemalloc PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${JEMALLOC_INCLUDE_DUR}"
|
||||
IMPORTED_LOCATION "${JEMALLOC_LIBRARY}")
|
||||
mark_as_advanced( JEMALLOC_FOUND JEMALLOC_LIBRARY JEMALLOC_EXTRA_LIBRARIES JEMALLOC_INCLUDE_DIR )
|
||||
endif (UNIX)
|
@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
from socket import AF_INET
|
||||
|
||||
import requests
|
||||
from pyroute2 import IPRoute
|
||||
|
||||
class LokinetRPC:
|
||||
|
||||
def __init__(self, url):
|
||||
self._url = url
|
||||
|
||||
def _jsonrpc(self, method, params={}):
|
||||
r = requests.post(
|
||||
self._url,
|
||||
headers={"Content-Type": "application/json", "Host": "localhost"},
|
||||
json={
|
||||
"jsonrpc": "2.0",
|
||||
"id": "0",
|
||||
"method": "{}".format(method),
|
||||
"params": params,
|
||||
},
|
||||
)
|
||||
return r.json()
|
||||
|
||||
def get_first_hops(self):
|
||||
data = self._jsonrpc("llarp.admin.dumpstate")
|
||||
for link in data['result']['links']['outbound']:
|
||||
for session in link["sessions"]['established']:
|
||||
yield session['remoteAddr']
|
||||
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("--rpc", type=str, default='127.0.0.1:1190')
|
||||
ap.add_argument("--ifname", type=str, default="lokitun0")
|
||||
ap.add_argument("--up", action='store_const', dest='action', const='up')
|
||||
ap.add_argument("--down", action='store_const', dest='action', const='down')
|
||||
args = ap.parse_args()
|
||||
rpc = LokinetRPC('http://{}/jsonrpc'.format(args.rpc))
|
||||
hops = dict()
|
||||
for hop in rpc.get_first_hops():
|
||||
ip = hop.split(':')[0]
|
||||
hops[ip] = 0
|
||||
if len(hops) == 0:
|
||||
print("lokinet is not connected yet")
|
||||
return 1
|
||||
with IPRoute() as ip:
|
||||
ip.bind()
|
||||
try:
|
||||
idx = ip.link_lookup(ifname=args.ifname)[0]
|
||||
except:
|
||||
print("cannot find {}".format(args.ifname))
|
||||
return 1
|
||||
gateways = ip.get_default_routes(family=AF_INET)
|
||||
gateway = None
|
||||
for g in gateways:
|
||||
useThisGateway = True
|
||||
for name, val in g['attrs']:
|
||||
if name == 'RTA_OIF' and val == idx:
|
||||
useThisGateway = False
|
||||
if not useThisGateway:
|
||||
continue
|
||||
for name, val in g['attrs']:
|
||||
if name == 'RTA_GATEWAY':
|
||||
gateway = val
|
||||
if gateway:
|
||||
for address in hops:
|
||||
try:
|
||||
if args.action == 'up':
|
||||
ip.route("add", dst="{}/32".format(address), gateway=gateway)
|
||||
elif args.action == 'down':
|
||||
ip.route("del", dst="{}/32".format(address), gateway=gateway)
|
||||
except:
|
||||
pass
|
||||
|
||||
if args.action == 'up':
|
||||
try:
|
||||
ip.route('add', dst='0.0.0.0/0', oif=idx)
|
||||
except:
|
||||
print('failed to add default route')
|
||||
return 1
|
||||
elif args.action == 'down':
|
||||
try:
|
||||
ip.route('del', dst='0.0.0.0/0', oif=idx)
|
||||
except:
|
||||
print('failed to remove default route')
|
||||
return 1
|
||||
else:
|
||||
print("could not find gateway")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=LokiNET VPN tunnel: shove all traffic over lokinet
|
||||
Wants=lokinet.service
|
||||
After=lokinet.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/bin/lokinet-vpn --up
|
||||
ExecStop=/usr/bin/lokinet-vpn --down
|
||||
RemainAfterExit=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
namespace llarp
|
||||
{
|
||||
/// default queue length for logic jobs
|
||||
constexpr std::size_t event_loop_queue_size = 1024;
|
||||
} // namespace llarp
|
Loading…
Reference in New Issue