我是网络新手,我想通过具有公共和私有网络连接的计算机共享互联网,对于仅有私有网络连接的计算机。
我有一个网络 10.0.0.0/16,子网为 10.0.0.0/24。我在这个私有网络上有 2 台计算机:
- private:它在 ens10 接口上有一个 IP:10.0.0.3
- 网关:在 ens10 接口上有一个 IP:10.0.0.2,在 eth0 接口上有一个公网 IP:1.2.3.4。它可以访问互联网。
我到目前为止所做的是:在网关计算机上(以 root 身份):
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -i eth1 -o ens10 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ens10 -o eth1 -j ACCEPT
在私人电脑上:
route add default gw 10.0.0.2
当我执行此命令时,我收到此响应:
SIOCADDRT:网络不可达
如果我尝试执行此操作
ip route add default via 10.0.0.2
我明白了
错误:Nexthop 具有无效网关。
我的问题是:
我如何强制流量通过 10.0.0.2?或者我在哪台计算机上做错了什么?
我的私人网络在Hetzner云中。
默认的私人计算机网络配置
10.0.0.0/16 via 10.0.0.1 dev ens10
10.0.0.1 dev ens10 scope link
xx.yy.169.254 via 10.0.0.1 dev ens10
答案1
最后我如何让它工作(加粗的部分很重要)...
在 hetzner admin 上,我添加了一条到我的网络的路由(10.0.0.0/16),其中:
目的地:0.0.0.0/0 网关:10.0.0.2
-> 这是我的网关服务器 IP 地址。使用此配置,所有流向互联网的流量都将通过我的网关服务器
在网关服务器上:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
在仅有私有网络的私有服务器上:
ip route 添加默认通过 10.0.0.1
我添加了一个名称服务器 /etc/resolv.conf
nameserver 8.8.8.8
我多次忘记重新启动 systemd-resolved.service
systemctl 重启 systemd-resolved.service
非常感谢您的回答!