设置NAT转发以通过网关服务器实现内网访问外网
由于时效问题,该文某些代码、技术可能已经过期,请注意!!!本文最后更新于:1 年前
内网服务器启动上网服务
场景如下:一个小HPC有一个master节点, 1个 node1 节点, master节点可以上网冲浪, node1节点无法冲浪
方案:使用NAT转发使node1通过master上网冲浪
步骤一:IP转发
在master节点编辑 /etc/sysctl.conf 文件,在该文件中确保以下行取消注释并设置为 1,以允许IP转发:
1 |
|
然后执行 sysctl -p
应用更改。
步骤二:配置NAT规则
在master节点使用 iptables 设置NAT规则来将 node1 的流量转发至外网。你需要选择哪个网络接口连向外网(举例使用 eth0):
1 |
|
这行命令会把所有经过 master 节点的流量都进行源地址转换(即,伪装成 master 节点),使得 node1 的流量看起来像是从 master 节点发起的。
将规则保存到一个文件,如 /etc/iptables/rules.v4,然后在 /etc/rc.local 或其他启动脚本中通过 iptables-restore 来加载它们:
1 |
|
并在启动脚本中添加:
1 |
|
PS: 如何判断 master 节点上的网络接口是连接外网的
查看接口配置和连接的网络:
常用的命令是 ip addr show 或者 ifconfig(如果系统上安装了)。这些命令列出了所有接口的IP地址及其状态。一般来说,连接到外网的接口通常拥有公网IP地址或者动态分配的私网IP地址,并且这个地址能够通过路由器访问到互联网。检查路由表:
使用 ip route show 或者 route -n 命令来查看系统的路由表。默认路由(0.0.0.0/0 或者 just default)指向的接口通常就是用于连接到外网的接口。测试网络连接:
可以尝试使用 ping 命令测试不同的接口与外网通信。对于每个网络接口,可以使用 ping -I8.8.8.8 来测试。能够成功发送和接收数据包的接口很可能就是连接到外网的。
步骤三:配置防火墙规则(如果有防火墙的话)
如果你的系统使用防火墙,比如 UFW 或 Firewalld,你需要确保它们配置成允许流量转发:
在 master 节点, 对于UFW,可能要编辑 /etc/default/ufw 文件:
1 |
|
然后,配置UFW规则来允许流量通过,或者直接用 iptables。
步骤四:在 node1 上配置网关
在 node1 节点上,你可能需要配置默认网关指向 master 节点的内网IP,这样所有默认路由的外网流量才会通过 master 节点。你可以使用 route 或者 ip route 命令来设置这个:
1 |
|
或者
1 |
|
步骤五:测试配置
完成配置后,从 node1 尝试ping外网地址,比如:
1 |
|
如果可以ping通,再尝试解析域名,这可以确认DNS解析是否也正常工作:
1 |
|
如果所有步骤操作正确,node1 应该能够通过 master 节点访问外网。
PS:DNS 配置:
检查 node1 上的 /etc/resolv.conf 文件,确保它包含正确的 DNS 服务器信息:
1
cat /etc/resolv.conf
里面应该列出至少一个 nameserver,例如:
1
2nameserver 8.8.8.8
nameserver 8.8.4.4这里 8.8.8.8 和 8.8.4.4 是 Google 的公共 DNS 服务器。
尝试使用公共 DNS 服务器:
如果 resolv.conf 没有列出 DNS 服务器,或者列出的 DNS 服务器不工作,你可以尝试更换为公共 DNS,如 Google 的 DNS:1
echo 'nameserver 8.8.8.8' | sudo tee /etc/resolv.conf > /dev/null
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!