我在我的linux服务器上运行iptables-command。
iptables -t mangle -F
iptables -t mangle -A PREROUTING -m state --state NEW -j MARK --set-mark 100
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -j TTL --ttl-set 33
这是我的服务器代码的一部分,使用iptables策略,我期望从我的socket-fd获得正确的TTL = 33和MARK = 100。
void get_mark(int connfd) {
int mark;
socklen_t marklen = sizeof(mark);
int n = getsockopt(connfd, SOL_SOCKET, SO_MARK, &mark, &marklen);
if (n) {
printf("get mark failed!\n");
} else {
printf("fd:%d MARK:%d\n", connfd, mark);
}
}
void get_ttl(int connfd) {
int ttl;
socklen_t ttllen = sizeof(ttl);
int n = getsockopt(connfd, IPPROTO_IP, IP_TTL, &ttl, &ttllen);
if (n) {
printf("get ttl failed!\n");
} else {
printf("fd:%d TTL:%d\n", connfd, ttl);
}
}
但是我失败了,给出MARK = 0和TTL = 64的实际结果。
fd:4 MARK:0
fd:4 TTL:64
是什么原因?
答案 0 :(得分:0)
检查 net.ipv4.tcp_fwmark_accept net.ipv4.tcp_fwmark_accept应该设置为1