Linux静态路由:Ping私有网络(附网络图)

Linux静态路由:Ping私有网络(附网络图)

网络图

在上面的网络图中,我的目标是192.168.20.20从系统 A 执行 ping 操作。我不想配置路由器。

为了实现这一点

  1. 所有流量192.168.20.0/24应首先转发至 10.200.8.14

  2. 那么系统 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_configsshd

接下来,使用以下命令登录主机 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 工作了。


这些步骤有必要吗?

相关内容