通过iptables实现转发上网

假设的环境配置:

  1. VM1:可以访问外网(我们称其为网关机器)。

    • 网络接口:eth0(连接外网)
    • 内网接口:eth1(连接虚拟机内网)
  2. VM2:不能直接访问外网(我们将使其通过 VM1 访问外网)。

    • 网络接口:eth0(连接虚拟机内网)

步骤 1:开启 VM1 上的 IP 转发

在 VM1 上启用 IP 转发,允许它将网络流量转发到其他网络接口。

# 临时开启 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久开启 IP 转发(修改配置文件)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p  # 应用修改

步骤 2:设置 VM1 上的 NAT(网络地址转换)

在 VM1 上设置 SNAT(源地址转换),使得来自 VM2 的请求通过 VM1 的外网接口访问外网。

假设:

  • VM1 的外网接口是 eth0
  • VM1 内网接口是 eth1
  • VM2 通过 eth0 连接到 VM1(即 VM2 和 VM1 在同一虚拟局域网内)。

在 VM1 上执行以下命令:

# 设置 NAT 规则,允许 VM2 通过 VM1 访问外网
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这条规则会将从内网接口(eth1)进来的流量通过外网接口(eth0)发送出去,并将源地址(VM2 的 IP)转换为 VM1 的 eth0 接口 IP。

步骤 3:配置 VM2 的默认网关

在 VM2 上设置其默认网关为 VM1 的内网接口 IP(假设 VM1 的内网接口 eth1 的 IP 为 192.168.1.1)。

# 在 VM2 上尝试 ping 外网
ping 8.8.8.8

步骤 4:测试连接

  • VM2 现在可以通过 VM1 访问外网。你可以通过执行 ping 或者尝试访问网页等方式来验证 VM2 是否能够访问外网。
# 在 VM2 上尝试 ping 外网
ping 8.8.8.8

如果一切配置正确,VM2 会通过 VM1 访问外网。

步骤 5:持久化 iptables 规则(可选)

iptables 规则默认是临时的,重启后会丢失。要使其在重启后依然有效,可以将规则保存。

在大多数基于 Debian 的系统(例如 Ubuntu)中,可以使用 iptables-persistent 工具保存规则:

# 安装 iptables-persistent
sudo apt-get install iptables-persistent

# 保存当前规则
sudo netfilter-persistent save

在基于 RedHat 的系统(例如 CentOS 或 RHEL)中,可以使用以下命令:

# 安装 iptables-services
sudo yum install iptables-services

# 保存规则
sudo service iptables save

这样,规则在重启后会自动加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daolongzhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值