https://blog.csdn.net/liang_operations/article/details/80747510

实现内部服务器C可以经过服务器B进行上网。

3.1服务器双网卡,一块配置外网IP,一块配置内网IP(内网的不要设置网关)

[root@liang ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:03:1e:48 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.19/24 brd 192.168.1.255 scope global eno16777736

valid_lft forever preferred_lft forever

3: eno33554976: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:03:1e:52 brd ff:ff:ff:ff:ff:ff

inet 10.0.0.141/24 brd 10.0.0.255 scope global dynamic eno33554976

valid_lft 1555sec preferred_lft 1555sec

inet6 fe80::20c:29ff:fe03:1e52/64 scope link

valid_lft forever preferred_lft forever

3.2确保服务器可以上网    

[root@liang ~]# ping -c 2 baidu.com

PING baidu.com (123.125.115.110) 56(84) bytes of data.

64 bytes from 123.125.115.110: icmp_seq=1 ttl=128 time=45.9 ms

64 bytes from 123.125.115.110: icmp_seq=2 ttl=128 time=45.8 ms

3.3在内核文件/etc/sysctl.conf里开启转发功能,然后执行sysctl -p生效

[root@liang ~]# tail -1 /etc/sysctl.conf

net.ipv4.ip_forward = 1

[root@liang ~]# sysctl -p

net.ipv4.ip_forward = 1

3.4配置iptables

[root@liang ~]# iptables -F

[root@liang ~]# iptables -P INPUT ACCEPT

[root@liang ~]# iptables -P FORWARD ACCEPT

[root@liang ~]# iptables -P OUTPUT ACCEPT

3.5路由转发

[root@liang ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 \

-o eno33554976 -j SNAT --to-source 10.0.0.141

-s 192.168.1.0/24 内部服务器网段

-o eno33554976 为路由转发服务器的外网网卡

-j SNAT --to-source 10.0.0.141 外网网卡IP地址

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE (伪装,适合外网IP地址变化的配置)

测试:

linux iptables 用法与NAT

 

1.相关概念

2.iptables相关用法

3.NAT(DNAT与SNAT)

相关概念

防火墙除了软件及硬件的分类,也可对数据封包的取得方式来分类,可分为代理服务器(Proxy)及封包过滤机制(IP Filter)。

代理服务是一种网络服务,通常就架设在路由上面,可完整的掌控局域网的对外连接。

IP Filter这种方式可以直接分析最底层的封包表头数据来进行过滤,所以包括 MAC地址, IP, TCP, UDP, ICMP 等封包的信息都可以进行过滤分析的功能,用途非常广泛。

其实Iptables服务不是真正的防火墙,只是用来定义防火墙规则功能的"防火墙管理工具",将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙功能。

iptables抵挡封包的方式:

拒绝让 Internet 的封包进入 Linux 主机的某些 port

拒绝让某些来源 IP 的封包进入

拒绝让带有某些特殊标志( flag )的封包进入

分析硬件地址(MAC)来提供服务

iptables命令中设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链,叫规则链。
规则链则依据处理数据包的位置不同分类:

PREROUTING: 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
INPUT:处理入站的数据包
OUTPUT:处理出站的数据包
FORWARD:处理转发的数据包
POSTROUTING: 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)

iptables中的规则表是用于容纳规则链,规则表默认是允许状态的,那么规则链就是设置被禁止的规则,而反之如果规则表是禁止状态的,那么规则链就是设置被允许的规则。

raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记(较少使用)

nat表:修改数据包中的源、目标IP地址或端口

filter表:确定是否放行该数据包(过滤)

规则表的先后顺序:raw→mangle→nat→filter

规则链的先后顺序:

入站顺序:PREROUTING→INPUT

出站顺序:OUTPUT→POSTROUTING

转发顺序:PREROUTING→FORWARD→POSTROUTING

内建表与链的关系流程图(去掉了mangle表):

    

另外注意:

1.没有指定规则表则默认指filter表。

2.不指定规则链则指表内所有的规则链。

3.在规则链中匹配规则时会依次检查,匹配即停止(LOG规则例外),若没匹配项则按链的默认状态处理。

iptables命令中则常见的控制类型有:

ACCEPT:允许通过.
LOG:记录日志信息,然后传给下一条规则继续匹配.
REJECT:拒绝通过,必要时会给出提示.
DROP:直接丢弃,不给出任何回应.

iptables命令基本参数和用法

格式为:"iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]"。

以下格式的写法或许更为清楚明白:
"iptables –[A|I 链] [-i|o 网络接口] [-p 协议] [-s 来源ip/网域] [-d 目标ip/网域] –j[ACCEPT|DROP]"

下表格为几乎所有常用的iptables参数,

参数

作用

-P

设置默认策略:iptables -P INPUT (DROP|ACCEPT)

-F

清空规则链

-L

查看规则链

-A

在规则链的末尾加入新规则

-I num

在规则链的头部加入新规则

-D num

删除某一条规则

-s

匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。

-d

匹配目标地址

-i 网卡名称

匹配从这块网卡流入的数据

-o 网卡名称

匹配从这块网卡流出的数据

-p

匹配协议,如tcp,udp,icmp

--dport num

匹配目标端口号

--sport num

匹配来源端口号

Iptables规则查看与清除

查看:

清除:

规则的清除

策略(Policy)的清除

Iptables 开放网口与ip来源

例:所有的来自 lo 这个网口的封包,都予以接受

iptables –A INPUT –i lo –j ACCEPT

例:目标来自 192.168.1.200 这个 IP 的封包都予以接受

iptables –A INPUT –i eth0 –s 192.168.1.200 –j ACCEPT

例:192.168.1.0/24 可接受,但 192.168.1.10 丢弃

iptalbes –A INPUT –i eth0 –s 192.168.1.0/24 –j ACCEPT

iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP

Iptables 规则记录

例:# iptables -A INPUT -s 192.168.1.200 -j LOG

相关信息就会被写入到/var/log/messages当中,然后该封包会继续进行

后续的规则比对。LOG 这个动作仅在进行记录而已,并不会影响到这个封包的其它规则比对的。

Iptables 开放tcp、udp端口

例:开放samba端口(udp137,138;tcp139,445)

iptables –A INPUT –i eth0 –p udp –dport 137:138 –j ACCEPT

iptables –A INPUT –i eth0 –p tcp –dport 139–j ACCEPT

iptables –A INPUT –i eth0 –p tcp –dport 445–j ACCEPT

iptables匹配ICMP端口和ICMP类型

iptables –A INPUT –p icmp –icmp-type 类型 –j ACCEPT

参数:--icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号,

例如 8 代表 echo request 的意思。(可自查询ICMP-type对应表)

Iptables –syn的处理方式

指定TCP匹配扩展

使用 –tcp-flags 选项可以根据tcp包的标志位进行过滤。

#iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK SYN

#iptables -A FROWARD -p tcp –tcp-flags ALL SYN,ACK

上实例中第一个表示SYN、ACK、FIN的标志都检查,但是只有SYN匹配。第二个表示ALL(SYN,ACK,FIN,RST,URG,PSH)的标志都检查,但是只有设置了SYN和ACK的匹配。

#iptables -A FORWARD -p tcp --syn

选项—syn相当于"--tcp-flags SYN,RST,ACK SYN"的简写。

Iptables 状态模块

例:只要已建立或相关封包就予以通过,只要是不合法封包就丢弃

iptables –A INPUT –m state –state RELATED ESTABLISHED –j ACCEPT

iptables –A INPUT –m state –state INVALID –j DORP

例:对局域网内mac地址为00:0C:29:56:A6:A2主机开放其联机

[root@linux ~]# iptables -A INPUT -m mac --mac-source 00:0C:29:56:A6:A2 -j ACCEPT

Iptables保存于恢复

iptables-save > /etc/sysconfig/iptables.20180606

iptables-restore < /etc/sysconfig/iptables.20180606

NAT(Network AddressTranslation网络地址转换)

首先说说局域网内封包的传送,

1. 先经过 NAT table 的 PREROUTING 链;

2. 经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;

3. 再经过 Filter table 的 FORWARD 链;

4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。

NAT 主机的重点就在于上面流程的第 1,4 步骤,也就是 NAT table 的两条重要的链:PREROUTING 与POSTROUTING。 那这两条链重要功能在于修改IP,而这两条链修改的IP又是不一样的,POSTROUTING在修改来源IP,PREROUTING则在修改目标IP 。由于修改的 IP 不一样,所以就称为来源NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。

SNAT即源地址转换,能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题。一个无线路由器也就使用此技术。

SNAT封包传送示意图

由上图可知,需要将192.168.10.10转换为111.196.211.212,iptables命令如下:

iptables –t nat –A POSTROUTING –s 192.168.10.10 –o eth1 –j SNAT --to-source 111.196.221.212

外网IP地址不稳定的情况即可使用MASQUERADE(动态伪装),能够自动的寻找外网地址并改为当前正确的外网IP地址

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

DNAT即目地地址转换,则能够让外网用户访问局域网内不同的服务器。(相当于SNAT的反向代理)

DNAT封包传送示意图

由上图可知,目标地址192.168.10.6在路由前就转换成61.240.149.149,需在网关上运行iptables命令如下:

iptables –t nat –A PREROUTING –i eth1 –d 61.240.149.149 –p tcp –dport 80 –j DNAT --to-destination 192.168.10.6:80

eth1网口传入,且想要使用 port 80 的服务时,将该封包重新传导到 192.168.1.210:80 的 IP 及 port 上面,可以同时修改 IP 与 port。此为地址映射与端口转换。

还可以使用REDIRECT单独进行端口转换

例:将 80 端口的封包转递到 8080端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

# 使用 8080 这个 port 来启动 WWW ,但是别人都以80来联机

Iptables-linux服务器做路由转发的更多相关文章

  1. 使用linux系统做路由转发

    使用linux系统(PC机)做路由转发 关键字:linux,Fedora,route,iptables,ip_forward 最近做网络实验,在实验过程中需要用到linux的转发功能,但是遇到一些问题 ...

  2. Linux服务器静态路由配置

    转载自:点击打开链接 静态路由是在路由器中设置的固定的路由表.除非网络管理员干预,否则静态路由不会发生变化.由于静态路由不能对网络的改变作出反映,一般用于网络规模不大.拓扑结构固定的网络中.静态路由的 ...

  3. linux服务器做网关

    首先创建两张路由表,只需要添加到相应的文件中即可,Linux一共支持255个路由表,rt_tables文件中默认已经存在了三张路由表,分别是:   255    local   254    main ...

  4. [Docker]Docker与Linux ip_forward数据包转发

    背景 今天在一台新虚拟机上需要临时启动一个consul服务,安装Docker后使用docker启动,但是在执行启动命令后发现docker有一个警告: WARNING: IPv4 forwarding ...

  5. 前端跨域问题的总结&&nodejs 中间层的路由转发

    前后端交互的时候,跨域是避不开的问题. 总结就是如下: 1.Cors 我在做前后端分离的时候,会采用cors 的方法:便于其他源的调用接口,这个可以设置成任意的源头,也可以允许指定的源头. 下面的是n ...

  6. MultipartFile 图片上传到Linux服务器Tomcat下的webapps目录

    第一次接触 linux 服务器,做图片上传的时候遇到了些坑,搞了些天总算成功了,记录一下 /** * 上传图片 * * @param request * @param file * @return * ...

  7. Linux 服务器--Iptables 端口转发

    日常Iptables 端口转发 需求:公司是局域网络,通过一个外网ip,进行互联网的访问.公司的云平台服务器在公网中,虚拟化平台中有一台内部服务器,用于公司某部门的使用,上面运行www 服务,ssh端 ...

  8. Linux数据包路由原理、Iptables/netfilter入门学习

    相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wik ...

  9. 基于嵌入式linux路由转发功能的实现

    环境 arm7开发板, uclinux系统,kernel version: linux-2.4.x arm芯片的单网卡双网口设备,eth0 WAN口 ipaddr 192.168.9.61 eth0: ...

随机推荐

  1. postman 百度网盘下载 64位

    最近找了一下postman的下载资源,竟然发现有些用户的资源要用csdn的积分下载,很是不爽.所以才想到在这里贴出我的百度网盘的地址 下载地址: 链接:https://pan.baidu.com/s/ ...

  2. async/await运用-前端表单弹窗验证同步书写方式(React)

    在前端项目中,我们经常会碰到这样的场景: 当前我们有一个表单需要填写,在完成表单填写后经过校验之后会弹出短信或者其他形式验证码,进行补充校验,然后一起提交给接口. 场景如下图: 当前为创建操作,编辑操 ...

  3. Mac OS X 常用快捷键一览

  4. Mysql 查询一天中每半小时记录的数量

    SELECT HOUR(e.time)as Hour,FLOOR(MINUTE(e.time)/30) as M, COUNT(*) as Count FROM error_log e WHERE e ...

  5. @codechef - BUYLAND@ Buying Land

    目录 @desription@ @solution@ @accepted code@ @details@ @desription@ 给定一个 R * C 表示高度的矩阵 A,另一个 H * W 的矩阵 ...

  6. oracle函数 floor(x)

    [功能]返回小于等于x的最大整数值 [参数]x,数字型表达式 [返回]数字 [示例] select floor(3.1),floor(2.8+1.3),floor(0) from dual; 返回4, ...

  7. vue-awesome-swiper轮播插件的使用方法及问题。

    在使用vue-awesome-swiper的时候,遇到一些问题,记录一下!       1.npm 安装 npm install vue-awesome-swiper --save 2.使用 在mai ...

  8. 理解虚拟主机与VPS,云服务器CVM与云服务器ECS的区别

    1.理解虚拟主机与VPS的区别:VPS与虚拟主机的区别 2.理解云服务器CVM与云服务器ECS的区别:云服务器CVM与云服务器ECS的区别 3.锐速安装一键包

  9. Codeforces Round #174 (Div. 1 + Div. 2)

    A. Cows and Primitive Roots 暴力. B. Cows and Poker Game 模拟. C. Cows and Sequence 线段树维护. D. Cow Progra ...

  10. Vue打包后放到服务器出现Loading chunk {n} failed 错误

    导航栏点击切换时 会出现Loading chunk {n} failed  ,刷新之后便不会出现.而且n在最新的build的文件中,n没有存在 偶然一次发现,项目更新迭代开发时上传测试环境后就会出现, ...