在上面的网络图中,我的目标是192.168.20.20
从系统 A 执行 ping 操作。我不想配置路由器。
为了实现这一点
所有流量
192.168.20.0/24
应首先转发至10.200.8.14
那么系统 B 应该有一条路由
192.168.20.20.
有没有办法在系统A中添加一条路由,以便到达网络的192.168.20.0/24
默认网关是10.200.8.14.
即使添加了这样的路由,为了到达10.200.8.14
我们仍然需要默认网关10.201.11.1.
请建议如何实现?
答案1
首先想到的是基于 SSH 的 VPN。查看man sshd_config
并搜索 PermitTunnel。
首先,确保PermitTunnel
(两台主机)已启用并且PermitRootLogin
(在 systemB 上)已或yes
已重新加载。without-password
/etc/ssh/sshd_config
sshd
接下来,使用以下命令登录主机 10.200.8.14:
# ssh -NTCf -w 0:0 10.200.8.14
以下步骤是使用专用 VPN 子网(本示例中为 192.168.10.0)配置接口:
systemA # ip link set tun0 up
systemA # ip addr add 192.168.10.10/32 peer 192.168.10.20 dev tun0
systemB # ip link set tun0 up
systemB # ip addr add 192.168.10.20/32 peer 192.168.10.10 dev tun0
然后为系统B后面的网络添加一条路由:
systemA # ip route add 192.168.20.0/24 via 192.168.10.10
systemA # ping 192.168.20.20
另一种方法是使用sshuttle
.sshuttle
从源代码或包管理器安装。然后运行:
systemA # /usr/sbin/sshuttle -D --pidfile /tmp/sshuttle.pid --dns -r user@systemB 192.168.20.0/24
这将要求输入sudo
密码,因为iptables
用于路由流量。您可以/etc/sudoers
使用以下方法更改文件visudo
以避免要求输入密码:
systemA # visudo
# add:
myuser ALL=(ALL) NOPASSWD: /sbin/iptables, /usr/bin/python
一些有趣的参考:
https://help.ubuntu.com/community/SSH_VPN
http://sleepyhead.de/howto/?href=vpn
https://github.com/apenwarr/sshuttle
答案2
我按照您的步骤通过 SSH 进行 VPN 操作。但问题出现在 arp 解析上。
添加192.168.10.0/24的路由后。
System C : route add -net 192.168.10.0/24 p255p2
我发出以下命令进行 arp 解析
System B : sudo arp -sD 192.168.10.10 eth1 pub
经过这些步骤后,Ping 工作了。
这些步骤有必要吗?