用iptables做NAT代理,使內網機器上外網


用iptables做NAT代理,使內網機器上外網

 

現狀:
服務器A只有一個內網IP,不能上外網,內網IP與服務器B內網相通;服務器B有一個內網IP和公網IP。想實現服務器A也能上外網。

1
2
3
4
服務器A:內網網卡:eth0  內網IP:192.168.0.10
 
服務器B:內網網卡:eth0  內網IP:192.168.0.20
         外網網卡:eth1  外網IP:203.195.45.182

實現方法:
1、在可以上外網的服務器B上,開啟路由轉發功能:
 
方法一:

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

注:上面命令在服務器重啟之后會失效,可以編輯/etc/rc.d/rc.local把上面命令添加到最底部,實現開啟自動執行。
 
方法二:

1
2
3
4
5
編輯/etc/sysctl.conf
找到net.ipv4.ip_forward = 0 修改為 net.ipv4.ip_forward = 1 最后保存。
 
執行sysctl -p命令使配置生效:
# sysctl -p

2、在可以上外網的服務器B上執行添加SNAT規則

1
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.10 -j SNAT --to 203.195.45.182
或者iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j MASQUERADE

如果想讓整個網段都通過服務器B上外網,修改上面規則命令中-s 192.168.0.10為-s 192.168.0.0/24,然后把想上外網的服務器默認網關改成192.168.0.20就可以了。
 
3、保存剛添加的iptables規則

1
# service iptables save

4、在需要上外網的服務器A上,修改內網網卡eth0的默認網關為192.168.0.20

1
# route add default gw 192.168.0.20

修改后,查看路由表,確認已修改成功,測試已經可以上外網了

1
2
3
4
5
6
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         192.168.0.20    0.0.0.0         UG    0      0        0 eth0

 

 

 

iptables配置使用 Snat 實現內網代理上公網【轉】 

 

NAT 全名是 Network Address Translation,字面上的意思是網絡地址轉換,它還可以分為源地址轉換(SNAT)和目的地址轉換(DNAT)。SNAT 主要是用來給內網的主機提供連接到 Internet 的默認網關,而 DNAT 主要將內網機器的端口映射到外網上面。

如果你在雲服務商哪里(比如,阿里雲/亞馬遜雲等)購買了多台機器,來組件一套服務的話(比如,應用和數據分離/數據庫讀寫分離等),我們可以通過最外置的服務器公網來訪問部署的服務,但是如果需要后置的內網機器來訪問外網的話(比如,需要爬取網頁信息/訪問外部服務器等)的話,就比較尷尬了。

當然,這個時候,我們可以為需要訪問外網的后置機器來配置雲服務商的公網地址,達到上述的目的。或者,使用一些代理軟件或工具達到同樣的目錄(支持多種協議類型)。但是,相對於使用防火牆規則來配置的話(比如,iptables/firewalld),會比較麻煩和費勁,此外還會有安裝相關的問題(比如,軟件工具等的bug或設計缺陷)。相對於使用一兩條命令可以完成的事情,何必那么費時呢?

外置公網 IP 機器 - 系統配置
# 開啟IP轉發功能
$ sudo sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

# 使修改的配置生效
$ sudo sysctl –p
外置公網 IP 機器 - 防火牆配置
復制代碼
# 默認accept的情況下必須要執行,默認是drop的話則需要執行
$ sudo iptables -I FORWARD -s 172.16.3.0/24 -j ACCEPT
$ sudo iptables -P INPUT ACCEPT
$ sudo iptables -P FORWARD ACCEPT
$ sudo iptables -P OUTPUT ACCEPT

# 在iptables上面添加Snat防火牆轉換規則
# 內網網段: 172.16.3.0/24
# 外置公網主機: 172.16.3.100
$ sudo iptables -t nat -I POSTROUTING -s 172.16.3.0/24 -j SNAT --to-source 172.16.3.100
或者iptables -t nat -A POSTROUTING -s 172.16.3.0/255.255.255.0 -o eth0 -j MASQUERADE # 阿里雲的話需要在VPC中添加一條VPC路由 # 登錄VPC控制台 -> 專用網絡 -> 實例管理 -> 路由表 -> 管理中添加路由條目 目標網段 0.0.0.0/0 下一跳類型 ECS實例 ECS實例 i-29304w23 # 后置主機測試是否可以訪問外網 $ ping www.bing.com
復制代碼

轉自

配置使用 Snat 實現內網代理上網
https://mp.weixin.qq.com/s/pJRSLlkJPTwAfBW_xQUT8Q

 
 

Iptables實現公網IP DNAT/SNAT

發布時間:June 13, 2013 // 分類:Iptables // No Comments

 

Iptables實現NAT是最基本的功能,大部分家用路由都是基於其SNAT方式上網,使用Iptables實現外網DNAT也很簡單,不過經常會出現不能正常NAT的現象。
以下命令將客戶端訪問1.1.1.1的HTTP數據DNAT到2.2.2.2,很多人往往只做這一步,然后測試不能正常連接。

1
iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to 2.2.2.2:80

想像一下此時客戶端訪問1.1.1.1的數據流程:

1
2
3
4
客戶端訪問1.1.1.1
1.1.1.1根據Iptables DNA將數據包發往2.2.2.2,此時源IP為客戶端IP
2.2.2.2處理后根據源IP直接向客戶端返回數據,要知道此時客戶端是直接和1.1.1.1連接的
然后呢,客戶端不知所雲,不能正常連接

最后還要添加一條SNAT規則,將發到2.2.2.2的數據包SNAT,1.1.1.1充當代理服務器的角色。

1
iptables -t nat -A POSTROUTING -d 2.2.2.2 -j SNAT --to- source 1.1.1.1

別忘記開啟內核轉發功能:

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


免責聲明!

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



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