linux实现nat转发和内部端口映射

news/2024/7/5 2:56:00

路由机

eth0:114.114.114.114(公网ip)  eth1:192.168.1.1(内网ip)

pc1

eth0:192.168.1.2(内网ip)    eth1(拨号ip)

pc2

eth0:192.168.1.3(内网ip)    eth1(拨号ip)

 

1.配置路由机网卡信息

vim /etc/sysconfig/network-scripts/ifcfg-eth1

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth1
UUID=85290fec-9166-4a02-90c3-711bf55d1ae2
DEVICE=eth1
ONBOOT=yes
HWADDR=00:0c:29:27:64:b8
IPADDR=192.168.1.1

此网卡只配置IP,不配置网关

2.配置pc1网卡

vim /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=d79660a0-4225-4f0e-96b1-4d61fc05a17c
DEVICE=eth0
ONBOOT=yes
HWADDR=00:0c:29:97:6a:4b
IPADDR=192.168.1.2
NETMASK=255.255.255.0
GATEWAY=192.168.1.1


pc2配置与pc1类似,保证2台pc机与网关能互相ping通

此时pc1 pc2还不能访问外网,需要路由机做iptables规则

1.查看机器的转发功能时候打开

cat /proc/sys/net/ipv4/ip_forward

若返回1则表示已经打开

返回0则:

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

此规则及时生效,但重启后就失效了,需要在配置文件里添加

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
#每个消息队列的最大字节限制
kernel.msgmax = 65536
#每个消息的最大size
kernel.shmmax = 68719476736
#内核参数定义单个共享内存段的最大值
kernel.shmall = 4294967296
#控制共享内存页数

iptables做nat转发规则

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 114.114.114.114

将192.168.1.0网段转发至路由机的公网IP(静态)

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

将所有网段转发至路由机公网ip(动态)
现在2台pc机就能访问外网了,如果不能访问则检查下dns配置

 

 

内部端口映射

iptables -t nat -A PREROUTING -d 114.114.114.114/32 -p tcp -m tcp --dport 26688 -j DNAT --to-destination 192.168.1.2:22

把192.168.1.2的22端口映射到外部26688端口
找台外网机器访问下114.114.114.114的26688端口,就可以直接进入pc1

 

 

删除规则:把-A改为-D

iptables -t nat -D PREROUTING -d 114.114.114.114/32 -p tcp -m tcp --dport 26688 -j DNAT --to-destination 192.168.1.2:22

映射失效

最后保存下iptables配置

/usr/sbin/iptables-save


但是当pc1拨号时也会导致端口映射失效,类似双网卡默认对外路由的问题,通过路由机访问的IP会默认走拨号端口,需要做下ip伪装,将通过访问内网的公网地址伪装成网关地址从而实现内网通信

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE


 

 

转载于:https://www.cnblogs.com/wxq008/p/6812839.html


http://lihuaxi.xjx100.cn/news/240853.html

相关文章

你需要的大概不是 enumerated

作者:KHANLOU,原文链接,原文日期:2017-03-28译者:四娘;校对:Cwift;定稿:CMBSwift 标准库里最容易被滥用的就是 Sequence 的 enumerated() 函数。这个函数会返回一个新的序…

IP地址和MAC地址

MAC地址又称硬件地址,是MAC帧的头部,在数据链路层只能看见MAC地址。 IP地址是逻辑地址,是IP数据报的头部,路由器根据IP地址进行路由选择。 IP地址为4个字节32位,编制经历了3个历史阶段。 MAC地址为6个字节48位。

深入理解C语言的define

上一篇讲到#include这个预编译指令,还有个常用的预编译指令:#define。它的表面意思是定义,通常被说成“定义常量”,但其真正作用是替换;如:#define SUCCESS 1这整句话是定义一个宏替换,其中SUCC…

1103 Integer Factorization 需再做

本题是典型的DFS剪枝 我对DFS有了更深的认识:整个过程就是一片森林(根节点不唯一)的生长,到了界限就得到结果并返回或者得不到结果也返回,DFS的参数存放的是所有需要积累的变量。 提示: 1. 最外层的while或者for可以看成是一个…

Windows和linux双系统——改动默认启动顺序

电脑上装了Windows 7和Ubantu双系统,因为Linux系统用的次数比較少而且还是默认的启动项对此非常不能容忍,因此得改动Windows为默认的启动项。 因为电脑上的系统引导程序是GRUB,因此改动当然也就落到Linux系统上啦。改动/boot/grub/grub.cfg该…

Java设计模式——适配器模式

《JAVA与模式》之适配器模式 在阎宏博士的《JAVA与模式》一书中开头是这样描述适配器(Adapter)模式的: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。…

1130 Infix Expression

考察&#xff1a;DFS进行中序遍历。 注意&#xff1a;给除了根节点以外的父节点加左右括号。 AC代码 #include<cstdio> #include<iostream> #include<set> #include<vector> #include<map> #include<algorithm> #include<cmath> …

如何实现对象交互

在本篇随笔中&#xff0c;我们学习下什么是对象选择&#xff0c;投影和反投影是如何工作的&#xff0c;怎样使用Three.js构建可使用鼠标和对象交互的应用。例如当鼠标移到对象&#xff0c;对象变成红色&#xff0c;鼠标移走&#xff0c;对象又恢复原来的颜色。 本篇随笔的源代码…