在linux下開啟IP轉發的方法


IP地址分為公有ip地址和私有ip地址,Public Address是由INIC(internet network information center)負責的,這些IP地址分配給了注冊並向INIC提出申請的組織機構。Private Address屬於非注冊地址,專門為組織內部使用。Private Address是不可能直接用來跟WAN通信的,要么利用幀來通信(FRE幀中繼,HDLC,PPP),要么需要路由的轉發(nat)功能把私有地址轉換為公有地址才行。

出於安全考慮,Linux系統默認是禁止數據包轉發的。所謂轉發即當主機擁有多於一塊的網卡時,其中一塊收到數據包,根據數據包的目的ip地址將數據包發往本機另一塊網卡,該網卡根據路由表繼續發送數據包。這通常是路由器所要實現的功

 

1、通過訪問sysctl的內核ipv4.ip_forward來判斷轉發是否開啟。

說明:現在有些網絡已經普及ipv6的,所以下面的命令可以從ipv4改為ipv6即可

使用sysctl:

sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 0

或者檢查/proc下的文件:

cat /proc/sys/net/ipv4/ip_forward 0

ipv4轉發沒有開啟 (值為 0)

 

2、啟動IP轉發

通過sysctl可以開啟ipv4的轉發功能 (無需重啟):

sysctl -w net.ipv4.ip_forward=1

或者

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

這種設置只是暫時的,它的效果會隨着計算機的重啟而失效。

通過在/etc/sysctl.conf設置參數:

如果想使IP轉發永久生效,就請修改/etc/sysctl.conf ,在這里可以增加一條net.ipv4.ip_forward = 1

/etc/sysctl.conf: net.ipv4.ip_forward = 1

如果ipv4轉發項已被設為0那么你只需要將它改為1。

 

3、要想是更改生效,你需要執行以下指令:

sysctl -p /etc/sysctl.conf

紅帽系列的發行版上可以通過重啟網絡服務使之生效:

service network restart

而在Debian/Ubuntu系列的發行版則用這樣的命令

#早期版本

/etc/init.d/procps.sh restart

#最新版本

/etc/init.d/procps restart

 

原文來自:

http://www.linuxidc.com/Linux/2017-09/147186.htm

 

Linux系統數據包轉發

 

 

幾個實例說明https://www.cnblogs.com/zhaogaojian/p/8186220.html

 

 

 

 

 

 

1. iptables的表格與鏈

1.1. Linuxs的iptables里面至少有三個表格(table)

  • Filter(過濾器):主要和進入Linux的數據包有關,是默認的tables;
  • NAT (地址轉換):Network Address Translation的縮寫,這個表格主要用來進行數據包的源地址以及目的地址的IP和Port的轉換;
  • Mangle:不做過多討論

1.2. 每個表格又含多個鏈(chain)

  1. Filter過濾器的鏈
  • INPUT: 定義規則過濾想要進入Linux主機的數據包;
  • OUTPUT:處理Linux主機想要送出去的數據包;
  • FORWARD:與當前的Linux主機無關,需要轉發到其他計算機的包;
  1. NAT地址轉換的鏈
  • PREROUTING:進行路由判斷前要遵循的規則;
  • POSTROUTING:進行路由判斷后要遵循的規則;
  • OUTPUT:過濾發出去的數據包
  1. 這些默認表格和鏈怎么相互工作
    這里不考慮Mangle表格,參看如下簡化后netfilter流程圖


     
     
  • 路徑A:數據包經過路由判斷后,是向Linux主機發起的,經過Filter:INPUT鏈進行數據控制;
  • 路徑B:數據包是要轉發走的,則先經過Filter:FORWARD的處理,然后經過NAT:POSTROUTING;
  • 路徑C:數據包是從Linux本機送出去的;

2. 轉發和NAT規則

多數的組織都只能分配到有限的公網IP地址。那么一個公司里面局域網(LAN)內的那么多節點要是上網就只能使用內網IP,這個時候就需要有一個Edge路由(比如說防火牆)可以從WAN上接受傳輸然后路由到內網節點上;同時防火牆/網關要可以吧局域網節點的數據包路由到WAN上。這個時候iptables就提供了路由和轉發的策略來防止一些異常使用網絡資源的行為。

2.1. FORWARD策略

'FORWARD'策略允許管理者來控制局域網內數據包轉發到哪里去。舉個例子來說,為了允許局域網內的數據包轉發,假設網關上分配了一個內網IP地址給eth1,那么我們就需要添加如下的一條轉發規則

iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT

這條規則就允許防火牆后面的系統來訪問內部網絡了,網關會把一個局域網內節點的數據包路由到另一個節點,通過eth1這個設備來傳遞所有數據包。

2.2. IP偽裝

允許通過防火牆的內網IP地址進行數據包轉發后,局域網內節點之間就可以相互通信了;但是這個時候還是不能訪問外網,我們還必須配置防火牆的IP偽裝,這個過程中會使用防火牆的外網地址(這里舉例的外網網卡是eth0)來替代LAN節點上過來的數據包的內網IP。

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

-t nat代表NAT表;-A POSTROUTING指定NAT上的POSTROUTING鏈; -j MASQUERADE指定了要用外網IP來替換數據包上的內網IP

2.3. DNAT設置

如果你的內網有個服務器,你想把它配置成外網可以訪問,你可以使用-j DNAT來配置NAT表的PREROUTING鏈來指定一個內網IP用於外網發過來的數據包請求的轉發。舉個例子來說,如果你希望轉發一個HTTP請求到你指定HTTP服務器:172.31.0.23,可以運行如下的命令:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
          --to 172.31.0.23:80 

這條規則指定了NAT表中的內建鏈PREROUTING把所有收到的HTTP請求都轉發到目的地址172.31.0.23

Note
如果你的FORWARD鏈中有一條默認的策略DROP,你必須添加一條規則來允許轉發收到的HTTP請求,只有這樣目的的NAT路由才有可能,
iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT




鏈接:https://www.jianshu.com/p/d4f349f6f48c


 
 

iptables實現IP地址重定向(轉發)

 

iptables不單只防火牆這么簡單,NAT轉發這些都很強大。但是市面上iptables的教程基本都是圍繞着CentOS 6來展開的,而對於CentOS 7和Ubuntu又不一樣的寫法,尤其是Ubuntu居然加了一個ufw做為封裝,目的是為了簡化iptables,個人感覺比較亂,封裝了太多導致上層看不到更多的原理!而CentOS 7整理來說會保持,但是有些規則還是變了,使用的是firewalld的新概念。

下面實現的是通過一個內網IP重定向到一個外網IP上,或者訪問一個外網IP重定向到一個內網IP,基本操作保持一致,主要目的就是重定向,有點類似host:

1、通過代理訪問121.8.210.236的轉向訪問192.168.191.236

sudo iptables -t nat -A OUTPUT -d 121.8.210.236 -j DNAT --to-destination 192.168.191.236 
sudo iptables -t nat -A OUTPUT -d 10.0.0.2 -p tcp --dport 11211 -j DNAT --to-destination 192.168.1.33:11211

2、反過來,訪問192.168.191.236的轉向訪問121.8.210.236

sudo iptables -t nat -A OUTPUT -d 192.168.191.236 -j DNAT --to-destination 121.8.210.236

 

 

配完后

iptables -t nat -A OUTPUT -d 192.168.1.100 -j DNAT --to-destination 192.168.1.1 

查看

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM