用iptables做NAT代理,使內網機器上外網 用iptables做NAT代理,使內網機器上外網iptables配置使用 Snat 實現內網代理上公網【轉】
用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
|
現狀:
伺服器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
|
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