mirror of https://github.com/dnomd343/XProxy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
2.2 KiB
47 lines
2.2 KiB
package network
|
|
|
|
import (
|
|
"XProxy/cmd/common"
|
|
log "github.com/sirupsen/logrus"
|
|
"strconv"
|
|
)
|
|
|
|
type tproxyConfig struct {
|
|
routeTable int
|
|
tproxyPort int
|
|
bypassCidr []string
|
|
}
|
|
|
|
func loadV4TProxy(config tproxyConfig) {
|
|
log.Info("Setting up TProxy of IPv4")
|
|
tableNum := strconv.Itoa(config.routeTable)
|
|
common.RunCommand("ip", "-4", "rule", "add", "fwmark", "1", "table", tableNum)
|
|
common.RunCommand("ip", "-4", "route", "add", "local", "0.0.0.0/0", "dev", "lo", "table", tableNum)
|
|
common.RunCommand("iptables", "-t", "mangle", "-N", "XPROXY")
|
|
log.Infof("Setting up IPv4 bypass CIDR -> %v", config.bypassCidr)
|
|
for _, cidr := range config.bypassCidr {
|
|
common.RunCommand("iptables", "-t", "mangle", "-A", "XPROXY", "-d", cidr, "-j", "RETURN")
|
|
}
|
|
common.RunCommand("iptables", "-t", "mangle", "-A", "XPROXY",
|
|
"-p", "tcp", "-j", "TPROXY", "--on-port", strconv.Itoa(config.tproxyPort), "--tproxy-mark", "1")
|
|
common.RunCommand("iptables", "-t", "mangle", "-A", "XPROXY",
|
|
"-p", "udp", "-j", "TPROXY", "--on-port", strconv.Itoa(config.tproxyPort), "--tproxy-mark", "1")
|
|
common.RunCommand("iptables", "-t", "mangle", "-A", "PREROUTING", "-j", "XPROXY")
|
|
}
|
|
|
|
func loadV6TProxy(config tproxyConfig) {
|
|
log.Info("Setting up TProxy of IPv6")
|
|
tableNum := strconv.Itoa(config.routeTable)
|
|
common.RunCommand("ip", "-6", "rule", "add", "fwmark", "1", "table", tableNum)
|
|
common.RunCommand("ip", "-6", "route", "add", "local", "::/0", "dev", "lo", "table", tableNum)
|
|
common.RunCommand("ip6tables", "-t", "mangle", "-N", "XPROXY6")
|
|
log.Infof("Setting up IPv6 bypass CIDR -> %v", config.bypassCidr)
|
|
for _, cidr := range config.bypassCidr {
|
|
common.RunCommand("ip6tables", "-t", "mangle", "-A", "XPROXY6", "-d", cidr, "-j", "RETURN")
|
|
}
|
|
common.RunCommand("ip6tables", "-t", "mangle", "-A", "XPROXY6",
|
|
"-p", "tcp", "-j", "TPROXY", "--on-port", strconv.Itoa(config.tproxyPort), "--tproxy-mark", "1")
|
|
common.RunCommand("ip6tables", "-t", "mangle", "-A", "XPROXY6",
|
|
"-p", "udp", "-j", "TPROXY", "--on-port", strconv.Itoa(config.tproxyPort), "--tproxy-mark", "1")
|
|
common.RunCommand("ip6tables", "-t", "mangle", "-A", "PREROUTING", "-j", "XPROXY6")
|
|
}
|
|
|