我现在如何在Linux中实现nat?

我现在如何在Linux中实现nat?

我以前可以用 iproute2(ip 规则和 ip 路由)来做到这一点,但它已经被弃用了。

我现在找到了 tc-nat。来自手册页:

 tc ... action nat DIRECTION OLD NEW

但是,使用时:

Command "nat" is unknown, try "tc actions help".

现在怎么办?全力投入 nftables 吧?

Ubuntu 18.04 LTS,内核 4.15.0-99-generic

答案1

通常的方法是使用iptables(防火墙规则)。这是我使用的脚本(NAT作为“伪装”,使用网络接口的IP地址):

#!/bin/bash

# masquerade $1 (e.g. eth0, ppp0) as $2 (default wlan0)

INTIF="$1"
EXTIF=${2:-wlan0}

echo $INTIF $EXTIF

modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat  

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT 
iptables -P FORWARD DROP
iptables -F FORWARD 
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

一开始您可能不需要进行所有这些设置,但这并没有什么坏处。

这是“共享互联网”的常用应用,如果您需要更复杂的 NAT 设置,请编辑问题并描述详细信息。

相关内容