![PyPI Now Supports iOS and Android Wheels for Mobile Python Development](https://cdn.sanity.io/images/cgdhsj6q/production/96416c872705517a6a65ad9646ce3e7caef623a0-1024x1024.webp?w=400&fit=max&auto=format)
Security News
PyPI Now Supports iOS and Android Wheels for Mobile Python Development
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
github.com/bhojpur/vpn
The Bhojpur VPN is a decentralized, virtual private networking system applied within the
Bhojpur.NET Platform for delivery of distributed
applications
or services
. It uses libp2p to build private decentralized networks that
could be accessed via shared secrets.
It can:
Create a VPN : Secure VPN between P2P peers
Act as a reverse Proxy : Share a TCP service. The Bhojpur VPN let exposes TCP services to the P2P network nodes without establishing a VPN connection: creates reverse proxy and tunnels traffic into the P2P network.
Send files via P2P : Send files over P2P between nodes without establishing a VPN connection.
Be used as a library: Plug a distributed P2P ledger easily in your project!
Download the precompiled static release in the releases page. You can either install it in your system or just run it.
The Bhojpur VPN works by generating tokens (or, a configuration file) that can be shared between different machines, hosts, or peers to access to a decentralized secured network between them. Every token is unique and identifies the network, no central server setup, or specifying hosts IP is required.
To generate a config run:
# Generate a new config file and use it later as BHOJPUR_VPN_CONFIG
$ vpnsvr -g > config.yaml
or, to generate a portable token:
$ BHOJPUR_VPN_TOKEN=$(vpnsvr -g -b)
NOTE: Tokens are config merely encoded in base64, so this is equivalent:
$ BHOJPUR_VPN_TOKEN=$(vpnsvr -g | tee config.yaml | base64 -w0)
All Bhojpur VPN commands implies that you either specify a BHOJPUR_VPN_TOKEN
(--token
as parameter) or a BHOJPUR_VPN_CONFIG
as this is the way for vpnsvr
to establish a network between the nodes.
The configuration file is the network definition and allows you to connect over to your peers securely.
Warning Exposing this file or passing-it by is equivalent to give full control to the network.
To start the VPN, simply run vpnsvr
without any argument.
An example of running Bhojpur VPN on multiple hosts:
# on Node A
$ BHOJPUR_VPN_TOKEN=.. vpnsvr --address 10.1.0.11/24
# on Node B
$ BHOJPUR_VPN_TOKEN=.. vpnsvr --address 10.1.0.12/24
# on Node C ...
$ BHOJPUR_VPN_TOKEN=.. vpnsvr --address 10.1.0.13/24
...
... and that's it! the --address
is a virtual unique IP for each node, and it
is actually the IP, where the node will be reachable to from the VPN. You can assign
IPs freely to the nodes of the network, while you can override the default
bhojpurvpn0
interface with IFACE
(or --interface
)
NOTE: It might take up time to build the connection between nodes. Wait at least 5 mins, it depends on the network behind the hosts.
Let's say you are developing something for the Kubernetes and you would like to a multi-node setup, but you have machines available only behind NAT; and, you would really like to leverage hardware.
Generate Bhojpur VPN
config: vpnsvr -g > vpn.yaml
Start the VPN:
on node A: sudo IFACE=bhojpurvpn0 ADDRESS=10.1.0.3/24 BHOJPUR_VPN_CONFIG=vpn.yml vpnsvr
on node B: sudo IFACE=bhojpurvpn0 ADDRESS=10.1.0.4/24 BHOJPUR_VPN_CONFIG=vpm.yml vpnsvr
Start Bhojpur DCP:
on node A: dcp server --flannel-iface=bhojpurvpn0
on node B: DCP_URL=https://10.1.0.3:6443 DCP_TOKEN=xx dcp agent --flannel-iface=bhojpurvpn0 --node-ip 10.10.4
We have used flannel here, but other CNI should work as well.
Don't miss out Bhojpur OS, which is a Linux derivative
built on top of Bhojpur DCP and Bhojpur VPN
for automatic
node discovery!
The Bhojpur VPN
could be used as a library. It is very portable and offers a functional
interface. To join a node in a network from a token, without starting the VPN:
import (
node "github.com/bhojpur/vpn/pkg/node"
)
e := node.New(
node.Logger(l),
node.LogLevel(log.LevelInfo),
node.MaxMessageSize(2 << 20),
node.FromBase64( mDNSEnabled, DHTEnabled, token ),
// ....
)
e.Start(ctx)
or, to start a Bhojpur VPN:
import (
vpn "github.com/bhojpur/vpn/pkg/engine"
node "github.com/bhojpur/vpn/pkg/node"
)
opts, err := vpn.Register(vpnOpts...)
if err != nil {
return err
}
e := vpn.New(append(o, opts...)...)
e.Start(ctx)
If during bootstrap you see messages like:
vpnsvr[3679]: * [/ip4/104.131.131.82/tcp/4001] failed to negotiate stream multiplexer: context deadline exceeded
or,
vpnsvr[9971]: 2021/12/16 20:56:34 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB)
or, generally experiencing poor network performance, it is recommended to increase the maximum buffer size by running:
$ sysctl -w net.core.rmem_max=2500000
FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.