切換語言為:簡體

使用iptables實現模擬下游HTTP服務的各種錯誤

  • 爱糖宝
  • 2024-11-27
  • 2027
  • 0
  • 0

一個服務具備好的魯棒性,肯定要相容下游各種各樣的非預期返回,防止下游API改動影響服務穩定性。

如何驗證呢?肯定不能手動改下游程式碼實現指定的錯誤返回,操作成本太大了。去開發或基於開源二次開發一個代理服務成本有比較高。iptables則是一個不錯的選擇。大概的實現方式可見下圖:

使用iptables實現模擬下游HTTP服務的各種錯誤

iptables用途及用到的命令

iptables可以實現路由轉發,且由於是linux網路層,效能極佳,一臺Linux服務可以滿足N多對被測服務和下游服務的故障驗證。

在測試時,可以透過手工、指令碼、或封裝一個執行命令服務,來對網路進行操作,實現向下遊請求的干擾(請求丟棄、請求拒絕)、隨機/指定錯誤(NAT到對應的外掛服務)。

NAT
# 查詢
iptables -t nat -L

# 配置埠轉發,將本機的埠轉發到其他機器上
# 例:透過 192.168.1.10 的 9996 埠轉發到 192.168.1.10 的 9650 埠
# 先設定允許ip_forward
sysctl -w net.ipv4.ip_forward=1
# 配置DNAT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 9996 -j DNAT --to-destination 192.168.1.10:9650
# 配置SNAT
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 192.168.1.10/32 --dport 9650 -j SNAT --to-source 192.168.1.10

# 刪除則是將 -A 修改爲 -D 即可,或獲取到對應的規則num,使用 iptables -t nat -D <num>

DROP / REJECT
# 查詢
iptables -L

# 請求丟棄
iptables -A OUTPUT -p tcp -d 192.168.1.10 --dport 9650 -j DROP
# 請求拒絕
iptables -A OUTPUT -p tcp -d 192.168.1.10 --dport 9650 -j REJECT

# 刪除則是將 -A 修改爲 -D 即可,或獲取到對應的規則num,使用 iptables -D <num>

外掛服務

該服務可以用flask實現一個輕量級的HTTP服務,設定好啟動引數,動態啟停即可。

當設定下游響應錯誤、指定錯誤返回、或隨機修改真實返回內容時,啟動該服務指令碼,NAT到該服務上。由這個外掛服務實現對應的各種各樣的錯誤。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.