menu Chancel's Blog
rss_feed lightbulb_outline

Linux主机实现NAT转发

类型:Network
创建时间:2021-06-15 15:10:51
更新时间:2021-06-15 15:10:51
类型:Network
更新时间:2021-06-15 15:10:51

如果我们在一个封闭的内网网络环境内有一台安装了Linux操作系统的双网卡机器,2个网卡分别接入了内网与公网,该机器具备访问公网的能力

将双网卡机器配置NAT转发后,可以实现让内网的其他机器获得访问公网的能力

NAT转发配置分为2步

  1. 开启内核转发功能
  2. 配置转发规则,将内网网卡数据包转发给外网网卡

首先看一下双网卡的情况,输出信息已做简略处理,操作系统是Ubuntu1804

chancel@chancel-server:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    ...
# 内网网卡
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 06:40:d3:a4:13:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.95/20 brd 192.168.15.255 scope global ens18
       valid_lft forever preferred_lft forever
    inet6 fe80::440:d3ff:fea4:13da/64 scope link 
       valid_lft forever preferred_lft forever
# 外网网卡
3: enx00a0c6000000: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:a0:c6:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.180/24 brd 10.0.0.255 scope global dynamic enx00a0c6000000
       valid_lft 72624sec preferred_lft 72624sec
    inet6 fe80::2a0:c6ff:fe00:0/64 scope link 
       valid_lft forever preferred_lft forever

开通内核的网络转发功能,使用 sudo vim /etc/sysctl.conf,并取消以下的注释

...
# 找到并取消注释或直接添加该行
net.ipv4.ip_forward=1
...

让刚才的操作生效

sudo sysctl -p

配置转发规则,将 ens18 网卡的数据包全部转发给 enx00a0c6000000

sudo iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o enx00a0c6000000 -j MASQUERAD

[[replyMessage== null?"发表评论":"@" + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageList.data.items.length]])

[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[messageItem.m_environ.browser]] [[messageItem.m_environ.os]] [[messageItem.m_environ.device]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[subMessage.m_environ.browser]] [[subMessage.m_environ.os]] [[subMessage.m_environ.device]]