telnet-openvpn
Version:
Connect to OpenVPN management port through telnet.
186 lines (148 loc) • 5.26 kB
Markdown
Connect to OpenVPN management port through telnet.
```bash
$ npm install telnet-openvpn --save
```
```js
var TelnetVPN = require('telnet-openvpn');
var vpn = new TelnetVPN();
var options = {
host: '127.0.0.1',
port: 1337,
ors: '\r\n',
sendTimeout: 2000
};
var auth = {
username: 'username',
password: 'password'
};
vpn.connect(options);
vpn.on('connect', function() {
vpn.exec('log on all').then(function() {
return vpn.exec('state on').then(function() {
return vpn.exec('hold release').then(function() {
return vpn.authorize(auth);
});
});
}).catch(function(error) {
console.error(error);
});
});
vpn.on('log', function(result) {
console.log(result);
});
vpn.on('error', function(result) {
console.log(result);
vpn.disconnect();
});
vpn.on('end', function(result) {
console.log(result);
vpn.destroy();
});
vpn.on('data', function(result) {
console.log(result);
});
```
```js
import TelnetVPN from 'telnet-openvpn';
let vpn = new TelnetVPN();
let options = {
host: '127.0.0.1',
port: 1337,
ors: '\r\n',
sendTimeout: 2000
};
let auth = {
username: 'username',
password: 'password'
};
vpn.connect(options);
vpn.on('connect', () => {
vpn.exec('log on all').then(() => {
return vpn.exec('state on').then(() => {
return vpn.exec('hold release').then(() => {
return vpn.authorize(auth);
});
});
}).catch((error) => {
console.error(error);
});
});
vpn.on('log', (result) => {
console.log(result);
});
vpn.on('error', (error) => {
console.log(error);
vpn.disconnect();
});
vpn.on('end', (result) => {
console.log(result);
vpn.destroy();
});
vpn.on('data', (result) => {
console.log(result);
});
```
Connects to the management port specified in the .ovpn file.
More options can be found in the [telnet-client](https://github.com/mkozjak/node-telnet-client#connectionconnectoptions---promise) docs.
options:
* host: Management IP address specified under "management" in .ovpn file (default: '127.0.0.1').
* port: Management port specified under "management" in .ovpn file (default: 1337).
* negotiationMandatory: Enable to disable telnet negotiations (default: true).
* ors: Output record separator. Used to execute commands from telnet console (default: '\r\n').
* sendTimeout: Waits for input return character (default: 3000).
### vpn.authorize(options) -> Promise
After user connects, vpn.authorize(auth) must be called if .ovpn file specifies auth-user-pass.
options:
* username: Client username for VPN service.
* password: Client password for VPN service
### vpn.exec(event) -> Promise
Specify telnet console commands through this function.
### vpn.on(event, [callback])
EventEmitter options emitted as information is received from telnet console.
events:
* connect: Telnet console has successfully connected to management port.
* log: Telnet console log outputs.
* error: Telnet console error outputs.
* end: Telnet console has ended session to management port.
* data: Telnet console output data important to user (JSON Formatted).
* state: (array) Current state of telnet console.
* hold: Telnet console waiting for user commands.
* success: Telnet data successfully obtained.
* bytecount: Telnet byte count.
* bytecount_cli: Per-client byte counts.
* password: Password information sent through telnet console.
* pid: Process id of session.
### vpn.disconnect() -> Promise
Ends telnet session and triggers the 'end' event emitter.
### vpn.destroy() -> Promise
Removes all instances of telnet console socket connection. Used for 'error' event emitter.
### vpn.end() -> Promise
Closes telnet session but does not kill all telnet instances like vpn.destroy().
It is possible the server may send some data.
## Important .ovpn file information:
```bash
# OpenVPN management IP and port (localhost 1337).
management 127.0.0.1 1337
# OpenVPN wait for hold release from telnet console (vpn.exec('hold release')).
management-hold
# OpenVPN wait for authentication from telnet console (vpn.authorize(auth)).
management-query-passwords
# OpenVPN authenticate using username and password from telnet console.
auth-user-pass
```
Start OpenVPN through command line (requires [OpenVPN](https://openvpn.net/index.php/open-source/downloads.html)) :
```bash
$ openvpn myconfig.ovpn
```
For more OpenVPN management commands please follow
[OpenVPN's documentation](https://openvpn.net/index.php/open-source/documentation/miscellaneous/management-interface.html)
## Credits
[telnet-client](https://github.com/mkozjak/node-telnet-client)
[node-openvpn](https://github.com/luigiplr/node-openvpn)