Moh*_*enN 18
要将 Linux 机器设置为路由器,您需要以下内容
1- 在盒子上启用转发
echo 1 > /proc/sys/net/ipv4/ip_forward
Run Code Online (Sandbox Code Playgroud)
假设您的公共接口是 eth1,本地接口是 eth0
2- 设置 natting 规则:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
3- 接受来自 eth0 的流量:
iptables -A INPUT -i eth0 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
4- 允许从公共接口建立连接。
iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
5- 允许传出连接:
iptables -A OUTPUT -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
mul*_*t3d 12
我认为其他答案忽略了一些要点。这是另一种方法,假设 iptables 处于新状态,再次使用 eth0 作为内部接口,使用 eth1 作为外部接口:
在内核中启用IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
# or
sysctl -w net.ipv4.ip_forward=1
Run Code Online (Sandbox Code Playgroud)
要在重新启动后保留此更改,请net.ipv4.ip_forward=1
在 中添加或取消注释/etc/sysctl.conf
或 中的文件/etc/sysctl.d
。
在 eth1 上启用伪装以重写传出数据包的源地址。--random
如果您确实想要对称 NAT,则最后需要:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random
Run Code Online (Sandbox Code Playgroud)
配置转发规则。默认情况下,iptables 将无条件转发所有流量。您可能希望限制来自互联网的入站流量,但允许所有传出流量:
# Allow traffic from internal to external
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
# Allow returning traffic from external to internal
iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT
# Drop all other traffic that shouldn't be forwarded
iptables -A FORWARD -j DROP
Run Code Online (Sandbox Code Playgroud)
请注意,我们没有触及过滤器表中的 INPUT 或 OUTPUT 链;这些与路由器无关。
要在重新启动后保留这些防火墙更改:
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables
Run Code Online (Sandbox Code Playgroud)
此步骤将根据 Linux 发行版的不同而有所不同。