mirror of
https://github.com/openp2p-cn/openp2p.git
synced 2025-10-03 15:56:50 +08:00
75 lines
2.0 KiB
Go
75 lines
2.0 KiB
Go
package openp2p
|
|
|
|
import (
|
|
"log"
|
|
"os/exec"
|
|
"runtime"
|
|
)
|
|
|
|
func allowTunForward() {
|
|
if runtime.GOOS != "linux" { // only support Linux
|
|
return
|
|
}
|
|
exec.Command("sh", "-c", `iptables -t filter -D FORWARD -i optun -j ACCEPT`).Run()
|
|
exec.Command("sh", "-c", `iptables -t filter -D FORWARD -o optun -j ACCEPT`).Run()
|
|
err := exec.Command("sh", "-c", `iptables -t filter -I FORWARD -i optun -j ACCEPT`).Run()
|
|
if err != nil {
|
|
log.Println("allow foward in error:", err)
|
|
}
|
|
err = exec.Command("sh", "-c", `iptables -t filter -I FORWARD -o optun -j ACCEPT`).Run()
|
|
if err != nil {
|
|
log.Println("allow foward out error:", err)
|
|
}
|
|
}
|
|
|
|
func clearSNATRule() {
|
|
if runtime.GOOS != "linux" {
|
|
return
|
|
}
|
|
execCommand("iptables", true, "-t", "nat", "-D", "POSTROUTING", "-j", "OPSDWAN")
|
|
execCommand("iptables", true, "-t", "nat", "-F", "OPSDWAN")
|
|
execCommand("iptables", true, "-t", "nat", "-X", "OPSDWAN")
|
|
}
|
|
|
|
func initSNATRule(localNet string) {
|
|
if runtime.GOOS != "linux" {
|
|
return
|
|
}
|
|
clearSNATRule()
|
|
|
|
err := execCommand("iptables", true, "-t", "nat", "-N", "OPSDWAN")
|
|
if err != nil {
|
|
log.Println("iptables new sdwan chain error:", err)
|
|
return
|
|
}
|
|
err = execCommand("iptables", true, "-t", "nat", "-A", "POSTROUTING", "-j", "OPSDWAN")
|
|
if err != nil {
|
|
log.Println("iptables append postrouting error:", err)
|
|
return
|
|
}
|
|
err = execCommand("iptables", true, "-t", "nat", "-A", "OPSDWAN",
|
|
"-o", "optun", "!", "-s", localNet, "-j", "MASQUERADE")
|
|
if err != nil {
|
|
log.Println("add optun snat error:", err)
|
|
return
|
|
}
|
|
err = execCommand("iptables", true, "-t", "nat", "-A", "OPSDWAN", "!", "-o", "optun",
|
|
"-s", localNet, "-j", "MASQUERADE")
|
|
if err != nil {
|
|
log.Println("add optun snat error:", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func addSNATRule(target string) {
|
|
if runtime.GOOS != "linux" {
|
|
return
|
|
}
|
|
err := execCommand("iptables", true, "-t", "nat", "-A", "OPSDWAN", "!", "-o", "optun",
|
|
"-s", target, "-j", "MASQUERADE")
|
|
if err != nil {
|
|
log.Println("iptables add optun snat error:", err)
|
|
return
|
|
}
|
|
}
|