Running the embassy-net
examples
To run net
, tcp_accept
, net_udp
and net_dns
examples you will need a tap interface. Before running these examples, create the tap99 interface. (The number was chosen to
hopefully not collide with anything.) You only need to do this once every time you reboot your computer.
cd $EMBASSY_ROOT/examples/std/
sudo sh tap.sh
The example net_ppp
requires different steps that are detailed in its section.
net
example
For this example, you need to have something listening in the correct port. For example nc -lp 8000
.
Then run the example located in the examples
folder:
cd $EMBASSY_ROOT/examples/std/
cargo run --bin net -- --tap tap99 --static-ip
tcp_accept
example
This example listen for a tcp connection.
First run the example located in the examples
folder:
cd $EMBASSY_ROOT/examples/std/
cargo run --bin tcp_accept -- --tap tap99 --static-ip
Then open a connection to the port. For example nc 192.168.69.2 9999
.
net_udp
example
This example listen for a udp connection.
First run the example located in the examples
folder:
cd $EMBASSY_ROOT/examples/std/
cargo run --bin net_udp -- --tap tap99 --static-ip
Then open a connection to the port. For example nc -u 192.168.69.2 9400
.
net_dns
example
This example queries a DNS
for the IP address of www.example.com
.
In order to achieve this, the tap99
interface requires configuring tap99 as a gateway device temporarily.
For example, in Ubuntu you can do this by:
- Identifying your default route device. In the next example
eth0
ip r | grep "default"
default via 192.168.2.1 dev eth0 proto kernel metric 35
- Enabling temporarily IP Forwarding:
sudo sysctl -w net.ipv4.ip_forward=1
- Configuring NAT to mascarade traffic from
tap99
toeth0
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i tap99 -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- Then you can run the example located in the
examples
folder:
cd $EMBASSY_ROOT/examples/std/
cargo run --bin net_dns -- --tap tap99 --static-ip
net_ppp
example
This example establish a Point-to-Point Protocol (PPP) connection that can be used, for example, for connecting to internet through a 4G modem via a serial channel.
The example creates a PPP bridge over a virtual serial channel between pty1
and pty2
for the example code and a PPP server running on the same computer.
To run this example you will need:
- ppp (pppd server)
- socat (socket CAT)
To run the examples you may follow the next steps:
- Save the PPP server configuration:
sudo sh -c 'echo "myuser $(hostname) mypass 192.168.7.10" >> /etc/ppp/pap-secrets'
- Create a files
pty1
andpty2
and link them
cd $EMBASSY_ROOT/examples/std/
socat -v -x PTY,link=pty1,rawer PTY,link=pty2,rawer
- open a second terminal and start the PPP server:
cd $EMBASSY_ROOT/examples/std/
sudo pppd $PWD/pty1 115200 192.168.7.1: ms-dns 8.8.4.4 ms-dns 8.8.8.8 nodetach debug local persist silent
- Open a third terminal and run the example
cd $EMBASSY_ROOT/examples/std/
RUST_LOG=trace cargo run --bin net_ppp -- --device pty2
- Observe the output in the second and third terminal
- Open one last terminal to interact with
net_ppp
example through the PPP connection
# ping the net_ppp client
ping 192.168.7.10
# open an tcp connection
nc 192.168.7.10 1234
# Type anything and observe the output in the different terminals