为了测试某些软件,我尝试在 Ubuntu 18.04 主机和在 VirtualBox 中运行的 Ubuntu 16.04 客户机之间建立 PPP 连接。到目前为止,我已经尝试过:
- 在主机上创建虚拟串行设备,
socat PTY,link=/dev/ttyS14 PTY,link=/dev/ttyS15
然后将 virtualbox 连接COM1
到/dev/ttyS14
作为主机设备 - 但 VirtualBox 抱怨它无法在端口上设置选项(在这种情况下,/dev/ttyS14
是指向 的链接/dev/pts/1
)。 - 将 VirtualBox 配置
COM1
为主机管道/tmp/vbox-serial
。但pppd
不知道命令行选项/tmp/vbox-serial
是串行端口。 - 创建一个虚拟串行设备并将其链接到一个套接字,
socat PTY,link=/dev/ttyS14 PIPE:/tmp/vbox-serial
并配置 VirtualBox以使用主机管道选项将其COM1
端口连接到现有套接字,但这会导致VM 启动(并且VirtualBox 以组成员用户的身份运行)。/tmp/vbox-serial
VERR_NET_CONNECTION_REFUSED
/tmp/vbox-serial
prw-rw-r-- 1 root tty
tty
有人能指出正确的组合以便 VirtualBox 和 pppd 可以通信吗?
答案1
我最终通过 TCP 实现了一些功能。在主机上:
sudo socat PTY,link=/dev/ttyS14 TCP4-LISTEN:1236
sudo pppd /dev/ttyS14 4000000 192.168.1.1:192.168.1.2 asyncmap 0 proxyarp lock crtscts modem nodetach noauth
将客户的COM1
端口配置为:* 模式 TCP * 连接到现有管道/套接字 * 路径/地址 127.0.0.1:1236
然后在客人:
sudo pppd /dev/ttyS0 4000000 asyncmap 0 lock crtscts modem nodetach noauth
假设链接已建立,则在主机上设置 NAT:
sudo iptables -A FORWARD -o eth0 -i ppp0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
并在客户机中设置路由:
sudo ip route add default dev ppp0 metric 50
VM 现在应该能够通过 PPP 链路将流量路由到互联网(假设您的主机可以通过 访问互联网eth0
)。