Skip to content

Instantly share code, notes, and snippets.

@adammw
Created April 14, 2015 11:24
Show Gist options
  • Save adammw/92181f1032f125f96c0f to your computer and use it in GitHub Desktop.
Save adammw/92181f1032f125f96c0f to your computer and use it in GitHub Desktop.
var dgram = require('dgram');
var config = {
1194: 'openvpn.example.com:1194',
1195: 'anothervpn.example.com:1194'
};
var listenSockets = {};
var natTable = {};
Object.keys(config).forEach(function(port) {
var forwardHost = config[port].split(':')[0];
var forwardPort = config[port].split(':')[1];
var listenSocket = listenSockets[port] = dgram.createSocket('udp4');
console.log('Listening on UDP port %d', port);
listenSocket.bind(port);
listenSocket.on('message', function(msg, rinfo) {
var natTableKey = [port, rinfo.addres, rinfo.port].join(':');
var socket = natTable[natTableKey];
if (!socket) {
socket = dgram.createSocket('udp4');
socket.bind();
socket.on('message', function(msg, rinfo2) {
console.log('Received %d bytes from %s:%d and forwarded to %s:%d', msg.length, rinfo2.address, rinfo2.port, rinfo.address, rinfo.port);
listenSocket.send(msg, 0, msg.length, rinfo.port, rinfo.address);
});
}
console.log('Received %d bytes from %s:%d and forwarded to %s:%d', msg.length, rinfo.address, rinfo.port, forwardHost, forwardPort);
socket.send(msg, 0, msg.length, forwardPort, forwardHost);
natTable[natTableKey] = socket;
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment